【问题标题】:AWS Redshift columnar storage vs distribution styleAWS Redshift 列式存储与分布方式
【发布时间】:2017-10-19 18:21:01
【问题描述】:

我一直在查看 AWS 文档,但似乎无法理解分发方式的工作原理以及该数据如何存储在 Redshift 上。我了解什么是列式存储数据库,但是当我阅读有关 Redshift 分布样式的文档时,我对数据如何存储在节点上感到困惑。分布方式就是将新加载的数据按行分布到计算节点的切片上。

例如,EVEN 分配方式定义为:

均匀分布

领导节点将行分布在一个切片中 循环方式,无论任何特定的值如何 柱子。当表没有时,均匀分布是合适的 参与 join 或 KEY 之间没有明确选择时 分布和所有分布。均匀分布是默认的 分发方式。

如果数据是按行分布的,那么数据究竟如何存储到列式存储中。数据分发到计算节点后,列式存储是否生效?

以下是讨论列式存储和分布样式的 AWS 文档的链接:

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    每个 Amazon Redshift 集群都有多个节点。每个节点都分为 slices,分配有 CPU 和磁盘存储空间。

    表中的每一列都是单独存储的,因此具有 3 列的表每个切片至少需要 3 个。这就是 Redshift columnar 的原因——每一列都是单独存储的。

    每个块的大小为 1 MB,并且是独立压缩的。

    见:Why does a table in my Amazon Redshift cluster consume more disk storage space than expected?

    分布键决定了哪些行存储在哪些切片上。请记住——每个切片对表中的每一列都有自己的存储空间,但行分布在切片之间。 (除了 ALL 的分布,它将每一行放入每个节点。)

    在切片上特定列的存储中,数据根据排序键进行排序。

    【讨论】:

    • 现在说得通了。关键信息是“每个切片对表中的每一列都有自己的存储空间,但行分布在切片之间”。因此,如果有两个表,每个表有 3 列,那么每个切片至少需要 6 个块,对吗?
    • 没错!对于小表来说效率不高,但数据仓库的表中通常有数十亿行,最有效的方法是分发数据以进行并行处理。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多