【发布时间】:2018-12-16 20:02:40
【问题描述】:
DynamoDB documentation 描述了表分区原则上的工作原理,但它对细节(即数字)非常轻描淡写。 DynamoDB 表分区究竟是如何以及何时发生的?
【问题讨论】:
标签: amazon-dynamodb
DynamoDB documentation 描述了表分区原则上的工作原理,但它对细节(即数字)非常轻描淡写。 DynamoDB 表分区究竟是如何以及何时发生的?
【问题讨论】:
标签: amazon-dynamodb
关于Stu提到的“删除分区”点。
您不能直接控制分区的数量,一旦创建了分区就无法删除 =>这种行为可能会导致性能问题 很多时候都出乎意料。
假设您有一个分配了 500WCU 的表。对于此示例,假设您在此表中存储了 15GB 的数据。这意味着我们达到了数据大小上限(每个分区 10GB),因此我们目前有 2 个分区,RCU 和 WCU 在这些分区之间拆分(每个分区可以使用 250WCU)。
很快就会有大量用户需要将数据写入表中(比如黑色星期五)。那么你会怎么做是将 WCU 增加到 10000 来处理负载,对吗?好吧,在幕后发生的事情是 DynamoDB 达到了另一个上限 - 每个分区的 WCU 容量(最大 1000) - 所以它创建了 10 个分区,数据通过我们表中的散列函数分布在这些分区之间。
黑色星期五结束后,您决定将 WCU 降低到 500 以节省成本。将会发生的是,即使您减少了 WCU,分区的数量也不会减少 => 现在您必须在 10 个分区之间拆分这 500 个 WCU(因此实际上每个分区只能使用 50 个 WCU)。
你看到问题了吗?如果您没有正确规划如何在您的应用程序中使用数据,这通常会被遗忘并且可能会咬到您。
TLDR:始终了解您的数据将如何被使用并正确规划您的数据库设计。
【讨论】:
我在 2016 年 1 月 20 日发现这个 presentation 由来自 AWS Loft San Franciso 的 Rick Houlihan(首席解决方案架构师 DynamoDB)制作。
演讲也在Youtube上。
这张幻灯片提供了有关如何/何时发生表分区的重要细节:
下面我已经概括了您可以将自己的值插入的方程式。
按容量划分的分区 = (RCUs/3000) + (WCUs/1000)
按大小划分的分区 = TableSizeInGB/10
Total Partitions = 取 Partitions by capacity 和 Partitions by size 中最大的一个。将其四舍五入为整数。
总的来说,一个分区最多可以包含 3000 个 RCU、1000 个 WCU 和 10GB 的数据。创建分区后,RCU、WCU 和数据将均匀分布在它们之间。
请注意,据我所知,一旦您创建了分区,降低 RCU、WCU 和删除数据不会导致删除分区。我目前没有这方面的参考资料。
【讨论】: