Amazon Redshift
数据库开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 Amazon Redshift 构建概念验证

Amazon Redshift 是一种快速、可扩展的数据仓库,让您可以使用标准 SQL 和现有的商业智能工具轻松且经济高效地分析您的所有数据。Amazon Redshift 的性能比其他数据仓库高 10 倍。它通过使用先进的查询优化、高性能本地磁盘上的列式存储、机器学习和大规模并行查询执行来达到此目的。

在以下章节中,您可以查找用于使用 Amazon Redshift 构建概念验证的架构。该框架为您提供了用于设计和运行安全、高性能且经济高效的 Amazon Redshift 数据仓库的架构最佳实践。本指南基于对涉及各种业务类型和使用案例的成千上万个客户架构的设计的审查编写而成。我们收集了大量客户体验来制定这一系列最佳实践,帮助您确定用于评估数据仓库工作负载的标准。

如果您是首次接触 Amazon Redshift 的用户,我们建议您阅读 Amazon Redshift 入门。本指南提供了使用 Amazon Redshift 来创建示例集群和处理示例数据的教程。要深入了解使用 Amazon Redshift 的好处以及定价,请参阅营销网页上的服务亮点定价信息

确定概念验证的目标

确定概念验证的目标对于确定要在评估过程中度量的项目至关重要。评估标准应包含当前难题、您要进行的旨在改善客户体验的增强以及解决您当前的运营痛点的方法。可以使用以下问题来确定概念验证的目标:

  • 是否有要改进其条款的特定服务等级协议?

  • 您有哪些扩展 Amazon Redshift 数据仓库的目标?

  • 您或您的客户需要在数据仓库中包含哪些新数据集?

  • 您需要对哪些业务关键型 SQL 查询进行基准测试? 确保包含各种 SQL 复杂性,如不同类型的查询(例如,提取、更新和删除)。

  • 您计划测试哪些通用类型的工作负载? 示例可能包括提取转换加载 (ETL) 工作负载、报告查询和批量提取。

在回答这些问题后,您应该能够制定构建概念验证的 SMART 目标。

设置概念验证

您通过两个步骤设置 Amazon Redshift 概念验证环境。首先,设置 AWS 资源。接下来,转换 schema 和数据集以进行评估。

设计和设置集群

您可以使用以下两个节点类型之一来设置集群:

  • 密集存储,可让您以非常低的价格使用硬盘 (HDD) 创建超大型数据仓库。

  • 密集计算,可让您使用高速 CPU、大量 RAM 和固态硬盘 (SSD) 创建高性能数据仓库。

工作负载和总体预算的目标应该有助于确定要选择的节点类型。调整集群的大小或切换到不同类型的节点非常简单,只需在 AWS 管理控制台中单击一下按钮即可。以下附加注意事项可帮助指导您设置集群:

  • 选择足以处理您的生产工作负载的集群大小。通常,您至少需要两个计算节点(多节点集群)。包含领导节点不产生额外的成本。

  • 在 Virtual Private Cloud (VPC) 中创建集群,这将提供比 EC2 Classic 安装更高的性能。

  • 计划至少保留 20% 的可用空间,或保留最大表所需的内存的三倍。提供以下内容时需要这种额外空间:

    • 用于使用和重写表的暂存空间

    • 用于真空操作和用于为表重新排序的可用空间

    • 用于存储中间查询结果的临时表

转换 schema 并设置数据集

您可以使用 AWS Schema Conversion Tool (AWS SCT) 或 AWS Database Migration Service (AWS DMS) 转换 schema、代码和数据。您的工具选择取决于数据的来源。

以下内容可帮助您在 Amazon Redshift 中设置数据:

集群设计注意事项

在设计集群时,请注意以下五个属性。SET DW 缩写是一个记住它们简单方法:

  • S – S 表示排序键。查询筛选器经常访问排序键列。按照以下最佳实践来选择排序键:

    • 选择多达三列来作为排序键列

    • 按照明确度的高低为排序键排序,但利用使用频率平衡这一点

    有关选择排序键的更多指南,请参阅选择最佳排序键和 AWS 大数据博客文章高级表设计行动手册

  • E – E 表示编码。编码设置用于每个表中的每一列的压缩算法。您可以自行设置编码或让 Amazon Redshift 为您进行此设置。有关如何让 Amazon Redshift 选择最佳压缩算法的更多信息,请参阅利用自动压缩加载表

  • T – T 表示表维护。当查询统计数据为最新时,Amazon Redshift 查询优化程序将创建更高效的执行计划。使用 ANALYZE 命令在加载、更新或删除表中的数据后收集统计数据。同样,您可以使用 VACUUM 命令最大程度地减少扫描的数据块的数量。VACUUM 通过执行以下操作提高性能:

    • 移除已从数据块中逻辑删除的行,从而减少要扫描的数据块

    • 按排序键顺序保存数据,从而帮助确定要扫描的特定数据块。

  • D – D 表示表分配。您有三个选项可用于表分配:

    • KEY – 您指定要分配的列。

    • EVEN – Amazon Redshift 利用轮询分配模式分配计算节点。

    • ALL – Amazon Redshift 将表的完整副本放在每个计算节点的数据库分片中。

    • 以下准则可帮助您选择最佳分配模式:

      • 如果用户使用 Customers 值频繁联接 customer id 表,并且此操作在数据库分片中均匀地分配行,则 customer id 是分配键的很好选择。

      • 如果表由 500 万个行组成并包含维度数据,则选择 ALL 分配样式。

      • EVEN 是分配模式的一个安全选择,但总是会导致在所有计算节点中分配数据。

  • W – W 表示 Amazon Redshift 工作负载管理 (WLM)。如果您使用了 WLM,您将控制 SQL 语句在计算集群中的流动以及要分配的系统内存。有关如何设置 WLM 的更多信息,请参阅实施工作负载管理

Amazon Redshift 评估核对清单

为获得最佳评估结果,请检查以下项目列表以确定它们是否适用于您的 Amazon Redshift 评估:

  • 日期加载时间 – 使用 COPY 命令是测试加载数据所需的时间的常用方法。有关更多信息,请参阅加载数据的最佳实践

  • 集群的吞吐量 – 每小时度量查询是确定吞吐量的常用方法。为此,请设置对工作负载运行典型查询的测试。

  • 数据安全 – 您可以利用 Amazon Redshift 轻松加密静态数据和传输中的数据。您还有很多管理密钥的选项,Amazon Redshift 还支持单点登录 (SSO) 集成。

  • 第三方工具集成 – 您可以使用 JDBC 或 ODBC 连接与商业智能和其他外部工具集成。

  • 与其他 AWS 服务的互操作性 – Amazon Redshift 与其他 AWS 服务集成,例如 Amazon EMR、Amazon QuickSight、AWS Glue、Amazon S3 和 Kinesis。您可以在设置和管理数据仓库时使用此集成。

  • 备份和制作快照 – Amazon Redshift 每更改 5 GB 数据或每 8 个小时(以先出现者为准)自动备份一次您的集群。您还可以随时创建快照。

  • 使用快照 – 在评估过程中尝试使用快照和创建另一个集群。评估您的开发和测试组织是否能使用集群。

  • 调整大小 – 您的评估应包含增加 Amazon Redshift 节点的数量和类型。您的集群在大小调整期间保持完全可访问,但它处于只读模式下。评估您的用户是否能检测大小调整是否正在进行。

  • 支持 – 我们强烈建议在评估过程中评估 AWS Support。

  • 分载查询和访问不常使用的数据 – 您可以使用 Amazon Redshift Spectrum 将查询分载到单独的计算层。您还可以直接从 S3 轻松访问不常使用的数据而无需将其提取到您的 Amazon Redshift 集群中。

  • 运营成本 – 将数据仓库的总体运营成本与其他选项进行比较。Amazon Redshift 是完全托管的,您可以对 1 TB 数据执行无限制分析(大约每年 1000 美元)。

对 Amazon Redshift 评估进行基准测试

以下可能的基准的列表可能适用于您的 Amazon Redshift 计算:

  • 为每个运行时类别组装一个查询列表。拥有足够的数量(例如,每个类别 30 个)有助于确保您的评估反映现实世界的数据仓库实现。

  • 添加唯一标识符以将您包含在评估中的每个查询与您为评估建立的类别之一关联。您随后可以使用这些唯一标识符确定系统表的吞吐量。您还可以创建 query_group 以整理评估查询。

    例如,如果您为评估建立了“报告”类别,您可以创建一个编码系统以使用“报告”一词标记评估查询。 然后,您可以在报告中将单个查询标识为 R1、R2、以此类推。以下示例演示了此方法。

    [SELECT "Reporting" as query_category, "R1" as query_id, * FROM customers]

    当您将查询与评估类别关联后,您随后可使用唯一标识符为每个类别确定系统表的吞吐量。以下示例演示了如何执行此操作。

    select query, datediff(seconds, starttime, endtime) from stl_query where querytxt like “%Reporting%” and starttime >= '2018-04-15 00:00' and endtime <'2018-04-15 23:59'
  • 利用在现有数据仓库中具有各种运行时间的历史用户或 ETL 查询来测试吞吐量。在测试吞吐量时,请记住以下几点:

    • 如果您使用了负载测试实用工具(例如,JMeter 之类的开源实用工具或者自定义实用工具),请确保该工具可以考虑网络延迟。

    • 确保负载测试实用工具基于 Amazon Redshift 中的内部系统表的吞吐量来计算执行时间。

  • 确定您计划在评估过程中测试的各种排列。以下列表提供了一些常见变量:

    • 集群大小

    • 实例类型

    • 加载测试持续时间

    • 并发设置

    • WLM 配置

需要更多帮助? 请参阅请求对 Amazon Redshift 概念验证的支持

其他资源

为了帮助您进行 Amazon Redshift 评估,请参阅以下内容: