Производительность формата сжатия AZ64

AWS Redshift недавно выпустил собственный новый формат кодирования AZ64, для которого они говорят:

По сравнению с кодировкой ZSTD, AZ64 потреблял на 5–10% меньше хранилища и был на 70% быстрее.

Когда я использую ANALYZE COMPRESSION my_table Я все еще получаю ZSTD как формат кодирования для всех его столбцов.

Так действительно ли он рекомендуется в качестве формата кодирования вместо ZSTD? Должен ли я наивно предпочитать AZ64, когда это возможно?

3 ответа

Решение

Я получил ответ от службы поддержки AWS на этот вопрос:

TL;DR

Что касается вашего вопроса, предпочтение AZ64 вместо ZSTD было возможным, да, вы можете это сделать.

Учитывая, что AZ64 обеспечивает лучшую производительность по сравнению с ZSTD

Для дальнейшего объяснения:

Да, AZ64 лучше ZSTD. Он имеет сопоставимое сжатие по сравнению с ZSTD, но гораздо более высокую производительность, что вы уже научились использовать. На данный моментANALYZE COMPRESSIONкоманда не поддерживает AZ64, также у меня нет ETA, когда AZ64 будет доступен с ANALYZE COMPRESSION. Я предлагаю вам присмотреть за

за обновлениями AWS Redshift. Я проверил это с внутренней сервисной командой.

ANALYZE COMPRESSION - это рекомендательный инструмент, который рекомендует оптимальную кодировку столбцов в зависимости от столбцов.

Когда ZSTD только вышел, его добавление в analyze compression команда.

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

AZ64 может применяться только к этим типам данных:

SMALLINT
INTEGER
BIGINT
DECIMAL
DATE
TIMESTAMP
TIMESTAMPTZ

Я провел эксперимент, чтобы проверить коэффициент сжатия. Я был удивлен, обнаружив, что он не всегда уменьшает размеры.

Шаги

  1. Создан create table DDL для исходной таблицы
  2. Изменено имя таблицы и кодировка для допустимых столбцов
  3. создал таблицу Вставил в новую таблицу из старой таблицы запустил
  4. VACUUM FULL <tablename> TO 99 PERCENT как для старой, так и для новой таблицы
  5. побежал ANALYZE <tablename> как для старой, так и для новой таблицы

Запрос, который я использовал для проверки размеров столбцов, заимствованных из /questions/36567501/kak-ya-mogu-uznat-razmer-kazhdogo-stolbtsa-v-tablitse-redshift/36567518#36567518

Полученные результаты

  • В id column является первичным ключом, поэтому имеет очень большую мощность, возможно, это поможет?
  • Столбец sort_order имеет значения в диапазоне 0-50 с большим количеством значений, близких к 0.
  • Временная метка created_at варьируется за многие годы с большим количеством данных за последнее время
  • Complete_step похож на порядок сортировки, но медиана ближе к 0

Изменить: я не сравнивал производительность, так что это только часть истории. В целом размер таблицы меньше, даже если бы некоторых полей не было.

Как указал Давос, AZ64 может значительно сократить объем используемой памяти.

Я провел базовый тест с идентичными наборами данных в двух таблицах. Один использует ZSTD, а другой - AZ64, где это возможно. Я не заметил прироста производительности. В целом, я заметил, что среднее время выполнения запросов к таблицам с использованием AZ64 занимает больше времени.

На рисунке ниже показано общее время выполнения всех запросов. AZ64 существенно медленнее. Это было для моего случая использования Redshift, могут быть ситуации, когда AZ64 действительно быстрее. Но найти не смог.

Полная информация доступна здесь, в моем блоге: http://www.hydrogen18.com/blog/redshift-az64-performance-vs-zstd.html

Другие вопросы по тегам