DynamoDB分区表如何?

F_S*_*O_K 0 amazon-dynamodb

DynamoDB文档描述表分区是如何工作的原则,但其对细节(如数字)很轻。DynamoDB表分区究竟如何以及何时进行的?

F_S*_*O_K 6

我在2016年1月20日从AWS Loft San Franciso的Rick Houlihan(首席解决方案架构师DynamoDB)制作了此演示文稿

该演示文稿也在Youtube上

这张幻灯片提供了有关如何/何时进行表分区的重要细节:

在此处输入图片说明

下面我概括了可以插入自己的值的方程式。


由容量分区 =(协调单位 / 3000)+(WCUs / 1000)

按大小划分的分区 = TableSizeInGB / 10

总分区 =以最大的的分区通过能力通过大小的分区。将其四舍五入为整数。


总之,一个分区最多可以包含3000个RCU,1000个WCU和10GB的数据。创建分区后,RCU,WCU和数据将均匀地分布在它们之间。

请注意,据我所知,一旦创建了分区,降低RCU,WCU和删除数据将不会导致删除分区。我目前没有参考。


Tom*_*Tom 6

关于Stu提到的“删除分区”这一点。

您不直接控制分区的数量,并且分区一旦创建就无法删除=>这种行为可能会导致很多时候意想不到的性能问题。

假设您有一个分配了 500WCU 的表。对于此示例,假设您在此表中存储了 15GB 的数据。这意味着我们达到了数据大小上限(每个分区 10GB),因此我们目前有2 个分区,其中 RCU 和 WCU 被分割(每个分区可以使用 250WCU)

很快,需要将数据写入表的用户将会大量增加(假设是黑色星期五)。那么您会做什么是将 WCU 增加到 10000 来处理负载,对吧?那么,幕后发生的事情是 DynamoDB 达到了另一个上限 - 每个分区的 WCU 容量(最大 1000) - 因此它创建了 10 个分区,数据通过表中的哈希函数在这些分区之间传播。

黑色星期五结束后 - 您决定将 WCU 减少到 500 以节省成本。将会发生的情况是,即使您减少了 WCU,分区的数量也不会减少 => 现在您必须将这 500 WCU 拆分为 10 个分区(因此实际上每个分区只能使用 50WCU)。

你看到问题了吗?这常常被遗忘,如果您没有正确规划如何在应用程序中使用数据,这可能会给您带来麻烦。

TLDR:始终了解您的数据将如何使用并正确规划您的数据库设计。