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
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'attributCOMPRESSED=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
1SHOW GLOBAL STATUS LIKE 'Column_%mpressions';
Ressources
comments powered by Disqus