AZ64压缩格式性能

AZ64 compression format performance

AWS Redshift 最近发布了他们自己的新编码格式 AZ64,他们说:

Compared to ZSTD encoding, AZ64 consumed 5–10% less storage, and was 70% faster

当我使用 ANALYZE COMPRESSION my_table 时,我仍然收到 ZSTD 作为其所有列的编码格式。

所以真的推荐它作为 ZSTD 之上的编码格式吗?我应该天真地尽可能使用 AZ64 吗?

我收到了 AWS Support 对这个问题的回复:

TL;DR

About your question preferring AZ64 instead of ZSTD were possible, yes you can do it.

Given AZ64 provide better performance compared to ZSTD

进一步解释:

Yes, AZ64 is better than ZSTD. It has comparable compression, when compared with ZSTD but greatly better performance, which is something you would have already learned using. As of now ANALYZE COMPRESSION command doesn't support AZ64, also I don't have an ETA on when AZ64 will be available with ANALYZE COMPRESSION. I will suggest you to keep an eye on

for any updates on AWS Redshift. I have verified this with the internal service team.

ANALYZE COMPRESSION is an advisory tool it recommends the optimal column encoding depending upon the columns.

当 ZSTD 首次出现时,它也花了一段时间才被添加到 analyze compression 命令中。

ZSTD 可用于任何数据类型,尽管有些数据类型不会像其他数据类型那样受益。你可以天真地把它应用到所有东西上,它工作得很好。

AZ64 只能应用于这些数据类型:

SMALLINT
INTEGER
BIGINT
DECIMAL
DATE
TIMESTAMP
TIMESTAMPTZ

我运行一个测试压缩系数的实验。我很惊讶地发现它并不总能使事情变得更小。

步骤

  1. 为原始 table
  2. 生成了 create table DDL
  3. 更改了 table 的名称和有效列的编码
  4. 创建了 table 从旧的 table 插入到新的 table 运行
  5. VACUUM FULL <tablename> TO 99 PERCENT 旧的和新的 table
  6. 运行 ANALYZE <tablename> 旧的和新的 table

我用来检查从

借用的列大小的查询

结果

  • id 列是主键,因此具有非常大的基数,也许这有帮助?
  • sort_order 列的值在 运行ge 0-50 之间,更多的值更接近 0
  • created_at 时间戳 运行 多年来随着最近的数据增加
  • completed_step类似于排序顺序但中位数更接近于0

Edit: I haven't done any performance comparison so this is only part of the story. Overall the size of the table is smaller, even if some fields weren't.

正如达沃斯指出的那样,AZ64 可能会显着减少所用的存储空间。

我在两个表中使用相同的数据集进行了基本测试。一个使用 ZSTD,另一个尽可能使用 AZ64。我没有看到性能提升。总的来说,我发现在使用 AZ64 的表上查询的平均运行时间更长。

下图显示了所有查询的总执行时间。 AZ64 要慢得多。这是针对我的 Redshift 用例,可能存在 AZ64 实际上更快的情况。但是我没找到。

完整信息可在我的博客上找到:http://www.hydrogen18.com/blog/redshift-az64-performance-vs-zstd.html