MariaDB et la compression de colonnes

MariaDB autorise différentes méthodes de compression des données dont une par colonne que nous allons tester et détailler

Structure de test

On créé 2 tables, une dont un champ de donnée sera compressé, l'autre nom, et on comparera la taille.

1CREATE TABLE `test_no_compression` (
2    `id` int(11) NOT NULL,
3    `data` text DEFAULT NULL
4) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
5
6CREATE TABLE `test_compression` (
7  `id` int(11) NOT NULL,
8  `data` text COMPRESSED=zlib DEFAULT NULL
9) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Puis on alimente ces tables, à répéter 100 fois :

1INSERT INTO `test_compression`    (`data`) VALUES('Lorem ipsum ... de 5000 caractères');
2INSERT INTO `test_no_compression` (`data`) VALUES('Lorem ipsum ... de 5000 caractères');

Résultats

Gain

Table Taille
test_compression 0.2 Mo
test_no_compression 1.5 Mo
  • La compression est possible à la volée via phpmyadmin, table déjà chargée
  • L'export de la structure de la table dans phpmyadmin ne précise pas l'attribut COMPRESSED=zlib ... bug ?
  • L'avantage de cette compression est le fort gain de place ainsi que le côté transparent au niveau applicatif, rien à toucher
  • Attention, une colonne indexée ne peut être compressée
  • Test fait sur un moteur innoDB

Variables

Quelques variables systèmes intéressantes relatives à la compression

1show global variables where variable_name in ('column_compression_threshold','column_compression_zlib_level','column_compression_zlib_strategy','column_compression_zlib_wrap');
1Variable_name 	Value 	
2column_compression_threshold 	100
3column_compression_zlib_level 	6
4column_compression_zlib_strategy 	DEFAULT_STRATEGY
5column_compression_zlib_wrap 	OFF

Variables globales MariaDB

1SHOW GLOBAL STATUS LIKE 'Column_%mpressions';

Compteurs d'état MariaDB

Ressources

comments powered by Disqus