亚马逊红移架构设计

5
我们正在考虑使用Amazon Redshift实施我们的数据仓库,并且我希望在Redshift中如何正确设计模式方面获得一些建议。
我完全不了解Redshift。过去,当我使用“传统”的数据仓库时,我习惯于创建诸如“源”,“阶段”,“最终”等模式,以根据数据处于哪个阶段将所有数据库对象分组。
默认情况下,Redshift中的数据库只有一个名为PUBLIC的模式。因此,我的问题是针对那些在Redshift中工作过的人,上述方法是否适用?如果不是,我很乐意听取一些建议。
谢谢。
3个回答

8
通过我在Redshift工作的经验,我可以自信地断言以下几点:
  1. 多个模式:您应该创建多个模式并相应地创建表。当您扩展时,您将更容易地确定表格的确切位置。假设您有3个模式,分别命名为productionaggregatesrough。现在,您知道表production将包含不应更改的表(大多数是OLTP数据)-例如user, order, transactions表。表aggregates将包含在原始表上构建的聚合数据-例如每个用户每天每类别下订单数量。最后,rough将包含任何不持有业务逻辑但需要某些临时工作的表-例如,检查1万用户列表的电影流派,该列表以Excel文件的形式与您共享。只需在rough模式中创建一个表格,执行您的操作并删除该表格。现在,您非常清楚地知道基于它们是原始表、聚合表还是临时表,您将在哪里找到这些表。

  2. 公共模式:忘记它的存在。任何没有前缀模式名称的表格都会在此处创建。很多混乱-没有存储任何重要数据的意义。

  3. 跨模式连接:这里没有停止的必要。您可以从许多模式中加入尽可能多的表格。事实上,最好创建维度表并稍后在PK上进行连接,而不是将所有信息保存在单个表格中。

花费一些时间设计模式和底层表结构。当您扩展时,更容易以访问控制为基础对事物进行更好的分类。如果我错过了一些明显的点,请告诉我。


你打错字了:“现在,你知道表格 production...” 应该改为 “现在,你知道模式 production...”(我试图编辑它,但是我得到了“Stack Overflow 上有太多待处理的编辑,请稍后再试”) - CyclingDave

3

在Redshift集群中,您可以拥有多个数据库,但我建议仅使用一个。您正确地指出了模式(基本上是命名空间)是分隔事物的好方法。您可以跨模式查询,但无法跨数据库查询。

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

为获得最佳结果,如果您有时间,请事先了解权限系统。您想 创建能够访问模式或表的组,并添加/删除用户以控制他们的操作权限。一旦这个设置完成,管理起来就变得相当容易。


您可以在Redshift集群中拥有多个数据库,但我建议只使用一个。这样做的原因是为了简化管理和维护,并且可以更好地控制资源分配。 - Roman

2
除了其他的回答,这里还有一些改善架构性能的建议。
首先:使用COPY命令进行自动压缩编码
使用COPY命令可以提高Amazon Redshift的性能。它可以将数据导入Redshift数据库中。COPY命令非常智能,它会自动选择最合适的编码设置来上传数据。您不必考虑这个问题。但是,它只会在第一次向空表上传数据时才这样做。
因此,在上传数据时,请确保使用大量的数据集,这样Redshift就能评估最佳的列编码方式。上传一些测试数据会让Redshift无法知道如何最好地优化压缩以处理真实的工作负载。
其次:使用最佳的分布式样式和键
分布式样式决定了数据在节点之间的分布方式。在表级别应用分布式样式可以告诉Redshift您想要如何分配表和键。因此,您指定分布式样式的方式对于使用Redshift实现良好的查询性能非常重要。您选择的样式可能会影响数据存储和群集的要求。它还会影响COPY命令执行所需的时间。
我建议将分发样式设置为所有较小维度的表。对于较大维度,应将维度和相关事实都分发到它们的连接列上。为了优化第二个较大的维度,请承担存储损失并进行全面分发。您甚至可以将维度列设计成事实。
第三点:使用最佳排序键
在指定的情况下,Redshift数据库会在具有排序键列排列的表中维护数据。由于每个分区都按预定义顺序排序;每个集群节点都维护其分区。 (在设计Redshift架构时,还要考虑对预算的影响。 Redshift的价格取决于存储数据量和节点数量。)
排序键可以显着优化Amazon Redshift性能。您可以以多种方式执行此操作。首先,使用数据过滤。如果where子句在排序键列上过滤,则跳过整个数据块。这是因为Redshift保存数据块。每个块标头记录最小和最大的排序键值。在该范围之外过滤,则可能跳过整个块。
另外,当连接两个按联合键排序的表时,数据按匹配顺序读取。此外,您可以在不进行单独的排序步骤的情况下执行合并连接操作。使用此方法将很容易地将大维度连接到大事实表,因为两者都无法适应哈希表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接