Сжатие данных

Содержание

Обзор

Для оптимизации I/O и уменьшения размера данных в кластерах ADB можно использовать сжатие — или компрессию — данных (data compression). Сжатие доступно только для append-optimized таблиц. В ADB доступны два типа сжатия данных:

  • Сжатие данных на уровне таблицы (table-level) — применяется ко всей таблице. Доступно для append-optimized таблиц как со строковой (row-oriented), так и с колоночной (column-oriented) ориентацией данных.

  • Сжатие данных на уровне столбца (column-level) — применяется к отдельному столбцу. Позволяет использовать различные алгоритмы сжатия для разных столбцов одной таблицы. Этот тип сжатия доступен только для append-optimized таблиц с колоночной ориентацией данных (column-oriented).

Типы сжатия данных
Ориентация данных Уровень Алгоритм Пример

Строковая

Таблица

  • ZLIB — алгоритм deflate.

  • ZSTD — алгоритм Zstandard.

Только на уровне таблицы:

CREATE TABLE ao_row_compressed (a int, b text)
WITH (appendoptimized=true,
           compresstype=zlib,
           compresslevel=5)
DISTRIBUTED BY (a);

Табличная

Таблица и отдельные столбцы

  • ZLIB — алгоритм deflate.

  • ZSTD — алгоритм Zstandard.

  • RLE_TYPE — алгоритм run-length encoding.

  • На уровне таблицы:

    CREATE TABLE ao_col_compressed_table (a int, b text)
    WITH (appendoptimized=true,
               orientation=column,
               compresstype=zlib,
               compresslevel=5)
    DISTRIBUTED BY (a);
  • На уровне столбца:

    CREATE TABLE ao_col_compressed_column
              (a int,
               b text ENCODING (compresstype=RLE_TYPE,
                                               compresslevel=1))
    WITH (appendoptimized=true,
               orientation=column)
    DISTRIBUTED BY (a);

Независимо от уровня, на котором применяется сжатие данных, для его настройки можно использовать следующие параметры (storage directives). Они заполняются в выражении WITH или ENCODING, соответственно:

  • compresstype — тип сжатия данных. Возможные значения: ZLIB, ZSTD и RLE_TYPE. Значения не чувствительны к регистру. По умолчанию используется значение none, при котором сжатие не применяется.

  • compresslevel — уровень сжатия данных. Возможные значения для различных алгоритмов приведены в таблице ниже. Уровни с наименьшими номерами соответствуют самой быстрой, но при этом наименьшей компрессии данных.

ВАЖНО
При одновременном описании сжатия данных в выражениях ENCODING и WITH более высокий приоритет у выражения ENCODING.
Параметры для настройки сжатия данных
Параметр Deflate Zstandard Run-length encoding

compresstype

ZLIB

ZSTD

RLE_TYPE

compresslevel

Возможные значения: 1 — 9.

  • 1 — наиболее быстрый метод с наименьшим сжатием данных. Используется по умолчанию.

  • 9 — самый медленный метод с наибольшим сжатием данных.

Возможные значения: 1 — 19.

  • 1 — наиболее быстрый метод с наименьшим сжатием данных. Используется по умолчанию.

  • 19 — самый медленный метод с наибольшим сжатием данных.

Возможные значения:

  • 1 — применить только RLE_TYPE. Это наиболее быстрый метод с наименьшим сжатием данных. Используется по умолчанию.

  • 2 — применить RLE_TYPE, а затем ZLIB с уровнем сжатия 1.

  • 3 — применить RLE_TYPE, а затем ZLIB с уровнем сжатия 5.

  • 4 — применить RLE_TYPE, а затем ZLIB с уровнем сжатия 9. Это самый медленный метод с наибольшим сжатием данных.

Рекомендации

Для наиболее эффективного сжатия данных рекомендуется:

  • Выбирать наиболее подходящий под конкретную задачу алгоритм сжатия:

    • ZSTD — обеспечивает как скорость, так и хорошую степень сжатия, которую можно сконфигурировать с помощью опции compresslevel.

    • ZLIB — по большей части, используется для обратной совместимости. Как правило, ZSTD превосходит этот тип сжатия при обычных рабочих нагрузках.

    • RLE_TYPE — по сравнению с другими алгоритмами сжимает данные лучше в случаях, когда одни и те же значения данных встречаются во множестве последовательных строк. Но этот тип сжатия не подходит для таблиц, которые не содержат больших наборов повторяющихся данных.

  • При выборе уровня сжатия данных следует помнить: чем выше этот уровень — тем больше, но дольше по времени сжатие данных. Фактически сжатие данных позволяет улучшить показатели I/O и уменьшить размер данных за счет ресурсов CPU. Поэтому всегда нужно соблюдать баланс между доступными ресурсами CPU и требуемой скоростью сжатия. Постарайтесь найти оптимальные настройки — чтобы избежать длительного сжатия и медленного сканирования данных.

  • Конечная производительность сжатых таблиц зависит от множества факторов, включая аппаратное обеспечение, параметры запросов и так далее. Всегда проводите тестирование — чтобы определить, насколько эффективно сжатие данных в конкретном окружении.

  • Не рекомендуется использовать сжатые таблицы в файловых системах, применяющих компрессию данных.

РЕКОМЕНДАЦИЯ
  • Используйте тип сжатия RLE_TYPE для больших наборов повторяющихся данных.

  • Для большинства других задач подходит ZSTD с уровнем сжатия данных 1 (сопоставим с ZLIB с уровнем сжатия 5).

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней