DynamoDB如何独立于写入来提供读取的吞吐量

时间:2014-05-17 15:14:57

标签: amazon-dynamodb distributed-database

Amazon DynamoDB允许客户provision the throughput of reads and writes independently。我已经阅读了关于DynamoDB之前的系统的Amazon Dynamo paper,并阅读了Cassandra和Riak如何实现这些想法。

我理解如何通过向集群添加节点来增加这些系统的吞吐量,然后集群将表的散列键空间划分到更多节点,从而只要跨散列键访问相对随机,就可以实现更高的吞吐量。但是在像Cassandra和Riak这样的系统中,这同时增加了读写的吞吐量。

DynamoDB如何以不同的方式构建,以便能够独立扩展读取和写入?或者他们不是,亚马逊只是为他们独立收费,即使他们基本上必须分配足够的节点来覆盖两者中的较大者?

1 个答案:

答案 0 :(得分:0)

您是正确的,将节点添加到群集应该会增加可用吞吐量,但这将基于群集而不是基于表。 DynamoDB群集是跨多个帐户的多个表的共享资源。它就像一个EC2节点:您正在为虚拟机付费,但该虚拟机托管在几台EC2虚拟机之间共享的真实机器上,根据实例类型,您可以获得一定数量的内存,CPU,网络IO等等。

当您支付吞吐量时,您要支付的费用是IO,并且可以单独限制它们。支付更多吞吐量不会导致Amazon在更多节点上对您的表进行分区。导致表分区更多的唯一因素是表的大小是否增长到需要更多分区来存储表数据的程度。从我收集的与DynamoDB工程师交谈的内容来看,分区的最大大小取决于集群中节点的SSD大小。

配置吞吐量的技巧是它在分区之间划分。因此,如果您有一个热门分区,即使您的总请求数未超过总读取或写入吞吐量,您也可能会受到限制和ProvisionedThroughputExceededExceptions。这与你提出的问题相反。您可以预期,如果您的表在更多分区/节点之间划分,您将获得更多吞吐量,但实际上它是相反的,除非您根据表的大小扩展吞吐量。