Redshift 数据存储架构

Redshift data storage schema

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

对我来说,预计 table(relation) 按列拆分并将列存储在块中,例如

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 幻灯片第 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

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

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

希望这有助于澄清!!