DynamoDB分区表如何?

时间:2018-07-09 07:46:46

标签: amazon-dynamodb

DynamoDB documentation描述了原则上表分区的工作原理,但是它仅涉及细节(即数字)。 DynamoDB表分区究竟是如何以及何时进行的?

2 个答案:

答案 0 :(得分:5)

我在2016年1月20日从AWS Loft San Franciso找到了presentation,这是由Rick Houlihan(首席解决方案架构师DynamoDB)生产的。

演示文稿也在Youtube上。

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

enter image description here

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


按容量划分的分区 =( RCU / 3000)+( WCU / 1000)

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

总分区 =取最大的分区容量分区大小。将其四舍五入为整数。


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

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

答案 1 :(得分:0)

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

您不直接控制分区的数量,并且一旦创建分区它们将无法删除 =>此行为会导致性能问题 strong>这是很多次没想到的。

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

不久,需要将数据写入表的用户数量将大大增加(例如黑色星期五)。因此,您要做的是将WCU增加到10000,以处理负载,对吗?好吧,在幕后发生的事情是DynamoDB达到了另一个上限-每个分区的WCU容量(最大1000)-因此它创建了10个分区,在这些分区之间,数据通过表中的散列函数分布。

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

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

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