选择分片密钥来优化 Amazon DocumentDB 弹性集群

作者: 杰森·达尔巴 | 2023

随着应用程序的增长,数据也会增长,因此,现代云应用程序必须拥有可以自动扩展的数据库。 Amazon DocumentDB (兼容 MongoDB)是一个完全托管的本机 JSON 数据库,采用灵活的企业应用程序架构构建,可将存储和计算分离,从而提高可扩展性并减少耗时的管理任务。 Amazon DocumentDB 弹性集群 允许您的文档数据库扩展到每秒数百万次读取和写入,几乎没有停机时间或性能影响。这使开发人员无需选择、管理或升级 Amazon DocumentDB 的实例。

在这篇文章中,我们介绍了 Elastic Clusters 功能和有关分片密钥选择的最佳实践,以确保在数据扩展时获得最佳性能。通过启用自动水平扩展,弹性集群超越了 Amazon DocumentDB 的架构边界。

亚马逊 DocumentDB 弹性集群的好处

Elastic Clusters 旨在随着工作负载的发展而根据您的需求进行扩展,并以简单且经济实惠的方式存储千兆字节的数据。成本是可预测的——您只需为消费量付费,无需管理底层基础架构。最重要的是,扩展每秒可以处理数百万次读取和写入。

弹性集群具有以下优点:

  • 快速且可扩展 -利用千兆字节的存储容量,您可以扩展到每秒数百万次读取和写入。I/O 可自动扩展,无需对配置进行管理,从而实现更多联网。
  • 完全托管 — 内置的高可用性将弹性集群的每个分片部署到多个可用区以实现冗余。默认情况下,自动补丁、耐久性和安全最佳实践都内置在内,从而减少了管理开销。

使用亚马逊 DocumentDB 弹性集群进行分片

弹性集群使用基于哈希的分片在分布式存储中对数据进行分区。通过哈希分片,Elastic Clusters 可在分区集群中提供更均匀的数据分布。分片将大型数据集拆分为分布在多个节点上的小型数据集,从而实现水平扩展。每个分片都有自己的计算容量、写入器和存储分区。Elastic Clusters 在分布式存储系统之间高效地复制数据,而不是通过在计算节点之间移动小块数据来对集合进行重新分区。分片根据分片键进行组织,分片键是用于在集群中分区数据的单个字段哈希索引。

分片键是 JSON 文档中的一个字段,Elastic Clusters 使用该字段将读取和写入流量分配到匹配的分片——它告诉系统您希望如何对数据进行分区。所选字段会直接影响集群的性能,因此在部署之前,了解您的数据集和有关分片密钥的最佳实践非常重要。你不希望其中一个分片包含过多的数据,这会导致数据分布不均衡。热分片是分布不均匀的直接结果,其中一个节点占据了大部分活动。

选择分片密钥的最佳实践

选择分片键时,选择基数高的字段很重要。最佳选择是具有大量唯一值的字段。具有高基数的密钥可以是 ID 号、用户名或电子邮件地址,从而允许在分片之间均匀分布数据。数据分布不均可能导致其中一个分片的处理繁重,从而影响服务性能。

考虑查询频率和使用模式也势在必行。在选择分片键时预先考虑查询负载,可确保查询在数据集中的分布均匀,从而减少延迟并提高性能。

示例用例

在以下示例数据集中,对于客户数据,customer_id 之所以被选为分片密钥,是因为它在各个字段中具有唯一性。高基数字段允许更有效地分配读取和写入的处理。相反,如果分片键字段的基数较低,则数据的处理可能会使一个分片过载。

添加更多数据时,Elastic Clusters 使用哈希分片在可用分片之间重新分配数据。再分配是自我管理的,无需任何手动维护。在向表中插入更多数据时,会自动进行再平衡,以确保数据均匀分布。下图说明了数据在可用分片上的再分布。

随着更多的分片添加到集群中,数据集继续通过分区键在分区之间分配数据,从而可以均匀地处理读取和写入。当集群中的节点数增加、减少或删除时,Elastic Clusters 会处理数据集的再分配。

结论

Amazon DocumentDB 弹性集群提供了一种新的可扩展方式,可以在完全托管的服务中对数据进行分区。随着基于云的现代应用程序的不断增加,对即使是最苛刻的应用程序也可以自我管理数据存储和处理的服务的需求也在不断增加。通过对应用程序的数据使用和查询模式进行简单分析,遵循分片密钥选择最佳实践将为 Elastic Clusters 提供一个启动点,使其能够扩展以适应未来的任何增长。

如果您有任何意见或问题,请将其留在评论部分。


作者简介

Jason D'Alba 是 亚马逊云科技 解决方案架构师负责人,专注于数据库和企业应用程序,帮助客户架构高度可用和可扩展的解决方案。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。