Независимая от движка хранения колоночная компрессия
Поддержка независимой от движка хранения колоночной компрессии была добавлена в MariaDB 10.3.2
Независимая от движка хранения колоночная компрессия позволяет сжимать колонки типов TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, VARCHAR и VARBINARY.
Это выполняется с помощью нового атрибута колонки COMPRESSED атрибут колонки: COMPRESSED[=<compression_method>]
В настоящее время поддерживается только метод сжатия zlib.
Совместимость длин полей
При использовании атрибута COMPRESSED, обратите внимание, что ДЛИНА ПОЛЯ уменьшается на 1; например, у BLOB длина составляет 65535, а у BLOB COMPRESSED — 65535-1. См. MDEV-15592.
Новые системные переменные
column_compression_threshold
- Описание: Минимальная длина данных колонки, пригодная для сжатия.
-
Командная строка:
--column-compression-threshold=# - Сфера действия: Глобальная, Сеанс
- Динамическая: Да
-
Тип данных:
numeric -
Значение по умолчанию:
100 -
Диапазон:
0до4294967295
column_compression_zlib_level
- Описание: Уровень сжатия zlib (1 — наибольшая скорость, 9 — наибольшее сжатие).
-
Командная строка:
--column-compression-zlib-level=# - Сфера действия: Глобальная, Сеанс
- Динамическая: Да
-
Тип данных:
numeric -
Значение по умолчанию:
6 -
Диапазон:
1до9
column_compression_zlib_strategy
-
Описание: Параметр стратегии используется для настройки алгоритма сжатия. Используйте значение
DEFAULT_STRATEGYдля обычных данных,FILTEREDдля данных, полученных от фильтра (или предсказателя),HUFFMAN_ONLYдля принудительного использования только кодирования Хаффмана (без сопоставления строк) илиRLEдля ограничения расстояний совпадений до одного (сжатие по повторам). Отфильтрованные данные в основном состоят из небольших значений с достаточно случайным распределением. В этом случае алгоритм сжатия настроен на их лучшее сжатие. ЭффектFILTEREDзаключается в том, чтобы заставить алгоритм больше использовать кодирование Хаффмана и меньше сопоставление строк; он находится где-то междуDEFAULT_STRATEGYиHUFFMAN_ONLY.RLEразработан для того, чтобы быть почти таким же быстрым, какHUFFMAN_ONLY, но обеспечивать лучшее сжатие данных изображений PNG. Параметр стратегии влияет только на коэффициент сжатия, но не на корректность сжатого вывода, даже если он настроен неверно.FIXEDпредотвращает использование динамических кодов Хаффмана, что позволяет упростить декодер для специальных приложений. -
Командная строка:
--column-compression-zlib-strategy=# - Сфера действия: Глобальная, Сеанс
- Динамическая: Да
-
Тип данных:
enum -
Значение по умолчанию:
DEFAULT_STRATEGY -
Допустимые значения:
DEFAULT_STRATEGY,FILTERED,HUFFMAN_ONLY,RLE,FIXED
column_compression_zlib_wrap
-
Описание: Если установлено
1(0по умолчанию), генерировать заголовок и хвост zlib и вычислять контрольное значение adler32. Это может быть использовано с движками хранения, которые не обеспечивают проверку целостности данных, для обнаружения повреждения данных. -
Командная строка:
--column-compression-zlib-wrap{=0|1} - Сфера действия: Глобальная, Сеанс
- Динамическая: Да
-
Тип данных:
boolean -
Значение по умолчанию:
OFF
Новые переменные состояния
Column_compressions
- Описание: Увеличивается каждый раз, когда данные поля сжимаются.
- Сфера действия: Глобальная, Сеанс
-
Тип данных:
numeric
Column_decompressions
- Описание: Увеличивается каждый раз, когда данные поля распаковываются.
- Сфера действия: Глобальная, Сеанс
-
Тип данных:
numeric
Ограничения
- В настоящее время поддерживается только метод zlib.
- Движок хранения CSV сохраняет данные без сжатия на диске, даже если атрибут COMPRESSED присутствует.
- Невозможно создать индексы по сжатым колонкам.
Сравнение с сжатием страниц InnoDB
Независимое от движка хранения колоночное сжатие отличается от сжатия страниц InnoDB по ряду аспектов.
- Оно независимо от движка хранения, в то время как сжатие страниц InnoDB применяется только к InnoDB.
- Благодаря специфичности по столбцу, можно обращаться к несжатым полям без накладных расходов на распаковку.
- Доступен только zlib, в то время как сжатие страниц InnoDB может предлагать альтернативные алгоритмы сжатия.
- Не рекомендуется использовать несколько видов сжатия для одних и тех же данных.
- Предназначено для сжатия больших BLOB, в то время как сжатие страниц InnoDB подходит для более общего случая.
- По колонкам нельзя создавать индексы, в то время как сжатие страниц InnoDB позволяет создавать индексы как обычно.
Примеры
CREATE TABLE cmp (i TEXT COMPRESSED); CREATE TABLE cmp2 (i TEXT COMPRESSED=zlib);
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/storage-engine-independent-column-compression/