2

Amazon DynamoDB 允许客户独立配置读取和写入的吞吐量。我已阅读有关 DynamoDB 之前的系统的Amazon Dynamo 论文,并阅读了有关 Cassandra 和 Riak 如何实现这些想法的信息。

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

DynamoDB 的架构有何不同,它们能够独立扩展读写?或者他们不是,亚马逊只是独立地为他们收费,即使他们基本上必须分配足够的节点来覆盖两者中的较大者?

4

1 回答 1

0

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

当您为吞吐量付费时,您所支付的是 IO,它们可以被独立限制。为更高的吞吐量付费不会导致 Amazon 将您的表分区到更多节点上。导致表被更多分区的唯一原因是表的大小增长到需要更多分区来存储表数据的程度。从我与 DynamoDB 工程师的谈话中收集到的分区的最大大小基于集群中节点的 SSD 大小。

预置吞吐量的诀窍在于它在分区之间进行划分。因此,如果您有一个热分区,即使您的总请求不超过总读取或写入吞吐量,您也可能会受到限制和 ProvisionedThroughputExceededExceptions。这与您提出的问题相反。您会期望,如果您的表在更多分区/节点之间划分,您将获得更多吞吐量,但实际上情况恰恰相反,除非您根据表的大小来扩展吞吐量。

于 2014-08-06T15:54:59.230 回答