【问题标题】:Amazon Redshift schema designAmazon Redshift 架构设计
【发布时间】:2017-07-23 21:16:53
【问题描述】:

我们正在考虑使用 Amazon Redshift 来实施我们的数据仓库,我想要一些关于如何在 Redshift 中正确设计架构的建议。

我对 Redshift 完全陌生。过去在使用“传统”数据仓库时,我习惯于创建“Source”、“Stage”、“Final”等模式,以根据数据所处的阶段对所有数据库对象进行分组。

默认情况下,Redshift 中的数据库有一个名为 PUBLIC 的模式。那么,我想问那些使用过 Redshift 的人,我上面概述的方法是否适用于这里?如果没有,我会喜欢一些建议。

谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-redshift data-warehouse


    【解决方案1】:

    您可以在一个 Redshift 集群中拥有多个数据库,但我会坚持使用一个。您是正确的,模式(本质上是名称空间)是划分事物的好方法。您可以跨架构查询,但不能跨数据库查询。

    我会避免使用公共架构,因为管理某些权限可能很困难(例如,拒绝某人访问公共权限比阻止他们创建表更容易)。

    如果您有时间,为了获得最佳效果,请提前了解权限系统。您想create groups that have access to schemas or tables 并从组中添加/删除用户以控制他们可以做什么。一旦你做到了,它就会变得很容易管理。

    【讨论】:

      【解决方案2】:

      凭借我使用 Redshift 的经验,我可以自信地断言以下几点:

      1. 多个架构:您应该创建多个架构并相应地创建表。当您进行缩放时,您可以更轻松地确定表格的确切位置。假设您有 3 个架构,分别名为 productionaggregatesrough。现在,您知道表 production 将包含不应更改的表(主要是 OLTP 数据) - 例如 user, order, transactions 表。表 aggregates 将具有基于原始表构建的聚合数据 - 例如 number of orders placed per user per day per category。最后,rough 将包含任何不包含业务逻辑但需要一些临时工作的表 - 让我们检查电影类型以获取 10 万用户的列表,其中在 Excel 文件中与您共享。只需在rough 模式中创建一个表,执行您的操作并删除该表。现在,您可以根据它们是原始表、聚合表还是临时表,非常清楚地知道在哪里可以找到这些表。

      2. 公共架构:忘记它的存在。任何没有以模式名称开头的表都会在那里创建。很多混乱 - 在那里存储任何重要数据毫无意义。

      3. 跨模式连接:没有止步于此。您可以根据需要从任意多的模式中加入任意多的表。事实上,您最好创建维度表并稍后加入 PK,而不是将所有信息保存在一个表中。

      花一些时间来设计架构和基础表结构。当您扩展时,您可以更轻松地根据访问控制对事物进行更好的分类。如果我遗漏了一些明显的要点,请告诉我。

      【讨论】:

        【解决方案3】:

        除了其他响应之外,这里还有一些提高架构性能的建议。

        首先:使用 COPY 命令自动压缩编码

        使用 COPY 命令提高 Amazon Redshift 的性能。它将数据输入 Redshift 数据库。 COPY 命令足够聪明。它会自动为其上传的数据选择最合适的编码设置。你不必考虑它。但是,它仅适用于第一次将数据上传到空表中。

        因此,请确保在首次上传数据时使用重要的数据集,Redshift 可以评估该数据集以最佳方式设置列编码。上传几行测试数据会使 Redshift 搞不清楚如何最好地优化压缩以处理实际工作负载。

        第二:使用最佳的分发方式和密钥

        分布风格决定了数据如何在节点之间分布。在表级别应用分布样式会告诉 Redshift 您希望如何分布表和密钥。因此,如何指定分布样式对于使用 Redshift 获得良好的查询性能很重要。您选择的样式可能会影响对数据存储和集群的要求。它还会影响 COPY 命令执行的时间。

        我建议将分布样式设置为所有尺寸较小的表格。对于大维度,将维度和关联的事实都分布在它们的连接列上。要优化第二个大维度,请获取存储命中并分发 ALL。您甚至可以将维度列设计成事实。

        第三:使用最佳排序键

        Redshift 数据库在表中维护数据,如果指定了排序键列的排列方式。因为它是在每个分区中排序的;每个集群节点都以预定义的顺序维护其分区。 (在设计 Redshift 架构时,还要考虑对预算的影响。根据存储的数据量和节点数量,Redshift 为 priced。)

        排序键显着优化了 Amazon Redshift 性能。您可以通过多种方式做到这一点。首先,使用数据过滤。如果 where-clause 过滤排序键列,它会跳过整个数据块。这是因为 Redshift 以块的形式保存数据。每个区块头记录最小和最大排序键值。过滤超出该范围,可能会跳过整个块。

        或者,当连接两个表时,按照它们的联合键排序,数据以匹配的顺序读取。此外,您可以合并加入而无需单独的排序步骤。使用这种方法将大维度连接到大事实表将很容易,因为它们都不适合哈希表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-17
          • 2019-08-10
          • 2012-09-01
          • 2018-11-26
          • 1970-01-01
          • 2010-09-28
          • 2022-01-19
          相关资源
          最近更新 更多