top of page

AWS Redshift 分配键与分片/分区的比较

已更新:11月5日

什么是 AWS Redshift?

AWS Redshift 是一项完全托管的云端 PB 级数据仓库服务。它使用户能够快速运行复杂查询并对大型数据集执行分析。Redshift 的一大亮点是能够将数据分布到多个节点。这不仅提升了性能,还确保系统能够随着数据需求的增长而无缝扩展。


了解 AWS Redshift 中的分发键

AWS Redshift 中的分布键决定了数据在集群节点间的分配方式。创建表时,可以指定一个分布键,指示 Redshift 如何分配行。这样做的主要目标是最大限度地减少查询执行过程中的数据移动,从而提高性能。


数据分布

分配方式的类型


  1. KEY 分布:此方法使用指定的列(分布键)来确定数据在各个节点之间的分布方式。例如,如果您有一个销售数据表,并使用“customer_id”作为分布键,则与特定客户相关的所有记录都将存储在同一节点上。这种安排可以显著加快频繁使用“customer_id”进行连接的查询速度。


  2. 全部分布:在这种方法中,表的完整副本存储在每个节点上。这对于经常与较大的事实表进行连接的较小维度表尤其有用。例如,包含产品信息的表可能足够小,可以将其完整复制到每个节点,从而确保在分析查询期间能够快速访问。


  3. 均匀分布:数据均匀分布在所有节点上,不考虑任何特定的列值。当没有明确的分布键或数据访问方式均匀时,这种分布方式非常有利。例如,在访问模式不可预测的情况下存储日志数据,均匀分布可能更有利。


分配键示例

假设有一家零售公司负责跟踪销售情况。如果销售数据围绕“store_id”上的分布键进行组织,那么特定商店的所有销售记录都将位于同一节点上。这种设置简化了按商店分析销售额的查询,因为跨节点的数据移动被最小化,从而提高了查询速度。


什么是分片?

分片是一种数据库架构模式,它将数据集划分为更小、更易于管理的片段,称为“分片”。每个分片都充当一个独立的数据库,可以驻留在不同的服务器上。这种方法广泛应用于分布式数据库,以提高性能和可扩展性。MongoDB、Couchbase、Cassandra、MySQL(使用 Vitess 或 Cluster 等工具)、PostgreSQL(通常带有扩展程序)、Oracle Database、Amazon DynamoDB 和 Google Spanner 都是使用分片的数据库示例。


分片的工作原理

在分片中,数据根据分片键(通常是频繁访问或查询的列)进行分区。每个分片包含总数据的一个子集。例如,如果一家公司跟踪用户数据,它可能会使用“user_id”作为分片键,将 ID 从 1 到 1,000,000 的用户组织到一个分片中,将 ID 超过 1,000,000 的用户组织到另一个分片中。这种划分方式使组织能够高效地扩展,随着用户群的增长添加新的分片。


分片示例

以一个存储玩家数据的在线游戏平台为例。如果玩家数据库按“player_id”进行分片,那么 ID 从 1 到 500,000 的玩家可能存储在一个分片中,而 ID 从 500,001 到 1,000,000 的玩家则存储在另一个分片中。该系统简化了负载平衡,因为随着玩家账户的增长,可以添加新的分片,从而确保性能的一致性。


什么是分区?

分区是一种数据库设计方法,它将大型表或索引拆分成更小、更易于管理的部分,这些部分称为分区。与通常涉及多个数据库的分片不同,分区可以在单个数据库实例内操作。PostgreSQL、MySQL、SQL Server、Oracle Database、MongoDB、Cassandra、Amazon DynamoDB、Google Cloud BigTable 和 Azure Cosmos DB 都是使用分区技术的数据库示例。


分区类型


  1. 范围分区:根据特定值范围将数据划分为多个分区。例如,销售记录表可以按月份进行分区,确保一月份的所有记录位于一个分区,二月份的所有记录位于另一个分区。


  2. 列表分区:数据根据一系列固定值进行分区。例如,客户数据库可以按国家/地区进行分区,为每个国家/地区的客户创建单独的分区。


  3. 哈希分区:在这种方法中,数据使用指定列的哈希函数跨分区进行拆分。这种方法通常用于没有定义范围或列表的情况。例如,客户数据可以基于“customer_id”进行哈希处理,从而将数据均匀分布在各个分区中。


分区示例

假设一家医疗保健提供商维护电子病历。如果记录表使用按年份进行范围分区,则每个分区可能代表一年的记录。这种设置可以更快地执行针对特定时间段的查询,因为搜索操作仅针对相关分区。


AWS Redshift 分配键与分片/分区之间的主要区别


数据分布与数据分割

AWS Redshift 分配键主要决定单个数据库实例内跨节点的数据组织方式。相反,分片和分区则涉及在多个数据库之间拆分数据,从而增强可扩展性。


性能优化

AWS Redshift 分配键旨在减少连接期间的数据移动,而分片和分区则将数据分布在各个服务器或分区之间。这种安排允许并行查询处理,从而提高高负载下的性能。


复杂性与管理

在 AWS 环境中,管理 Redshift 中的分发键相对简单。相比之下,分片需要复杂的逻辑来确定访问哪个分片,这增加了管理难度。


可扩展性

与 Redshift 分配键相比,分片技术提供了显著的可扩展性。通过添加更多分片,数据库可以水平扩展。而 Redshift 通常采用垂直扩展,这可能会导致实例类型的限制。


何时使用 AWS Redshift 分配密钥

AWS Redshift 分配密钥在以下情况下有效:


  • 您经常连接表:如果表经常在特定列上连接,则使用它作为分配键可以大大提高性能。


  • 数据集大小是可管理的:当数据集足够大以保证分发但又不会过大而需要分片时,分发键是最佳的。


  • 您正在使用 AWS Redshift:如果您的仓库是在 Redshift 上设置的,则使用分发密钥自然与其架构相一致。


何时使用分片或分区

在以下情况下,分片或分区是首选:


  • 数据量巨大:超大数据集受益于分片,分片将负载分散到多个数据库,从而提高效率。


  • 访问模式多种多样:需要各种数据段的应用程序可从分片中受益,从而允许有针对性的查询来优化性能。


  • 需要水平扩展:如果高可用性和容错是优先事项,则分片可以通过将数据分布在多个服务器上来避免单点故障。


选择正确的方法

要确定 AWS Redshift 分配键或分片/分区是否适合您,请考虑:


  1. 数据大小:评估数据集的大小是否需要实施分片的复杂性。


  2. 查询模式:检查如何查询数据以及实施分发键是否会增强这些查询。


  3. 可扩展性需求:确定未来的可扩展性要求以及分片是否有助于适应增长。


  4. 管理开销:反思处理分片数据库的复杂性与 Redshift 分发键的相对简单性。


结论

了解 AWS Redshift 分配键与传统分片或分区方法之间的差异对于优化数据存储和检索至关重要。每种方法都具有独特的优势,可满足不同的用例需求。通过全面评估数据集大小、访问模式和增长需求,您可以选择合适的策略来增强数据管理流程。


在瞬息万变的数据分析领域,选择合适的架构可以显著提升性能和成本效益。无论您选择 Redshift 分配键还是分片/分区方法,关键在于根据您的具体需求和目标进行选择。


显示分析结果的数字仪表板的视线水平视图
显示分析结果的数字仪表板的视线水平视图
bottom of page