Redshift 数据存储架构

Posted

技术标签:

【中文标题】Redshift 数据存储架构【英文标题】:Redshift data storage schema 【发布时间】:2015-11-27 19:48:38 【问题描述】:

AWS Redshift 被命名为列式 MPP 数据库。

对我来说,例如,预计表(关系)会按列拆分并将列存储在块中

blk0    col0_val0, col0_val1, col0_val2, ..., col0_val15
blk1    col0_val16,........................., col0_val31
...
blkn    col1_val22,..........................,col1_val50

这意味着在每个块中只存储一列中的值

但经过研究(参考:http://www.slideshare.net/AmazonWebServices/building-your-data-warehouse-with-amazon-redshift/24 slide page 24)我看到 Redshift 将数据存储在以下架构中

blk0    col0_val0, col1_val0, col0_val1, col1_val1......
...
blkn    col0_val100, col1_val100 ......

每个块中的多列(整行)

那不是面向行的吗?为什么叫列式存储?

其他参考,页面中的蓝色区域图https://blog.chartio.com/blog/understanding-interleaved-sort-keys-in-amazon-redshift-part-1

【问题讨论】:

【参考方案1】:

我明白了造成混乱的原因。是的,您是正确的,列式数据库(包括 redshift)“按列”存储表数据块,这意味着任何给定的块应该只包含来自单个列的数据。是的,Redshift 也是如此。

您引用的链接正在讨论复合和交错排序键,它们本质上是一种可选的索引方法,Redshift 可以使用它来使某些类型的随机(即非顺序)访问变得更快、更快。在这些情况下,假设您选择的排序键包含多个列,那么只有在这种情况下,才会将多个列值组合到一个块中。从性能优化的角度来看,这是有道理的。如果我希望我的所有数据按“month_name”和“day_number”的组合进行排序(诚然,这是一个过于简单的示例),那么组合排序键希望将这两个值按顺序存储在同一个块中是有道理的。

希望这有助于澄清!

【讨论】:

以上是关于Redshift 数据存储架构的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 中存储事件数据的最佳方式是啥?

Tableau 数据存储迁移到 Redshift

通过数据管道将错误消息存储到 Redshift

Redshift中的存储过程将数据加载到表中

递归地将数据从 redshift 卸载到 S3 存储桶

AWS Redshift 列式存储与分布方式