提问者:小点点

DynamoDB如何独立于写操作提供读取吞吐量


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

我了解如何通过向集群中添加节点来增加这些系统的吞吐量,然后将表的哈希键空间划分为更多节点,从而允许更大的吞吐量,只要哈希键之间的访问相对随机。但在Cassandra和Riak这样的系统中,这会同时增加读写吞吐量。

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


共1个答案

匿名用户

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

当您为吞吐量付费时,您所支付的是IO,它们可以被独立地抑制。支付更多的吞吐量不会导致Amazon将您的表划分到更多的节点上。导致表分区更多的唯一原因是,如果表的大小增长到需要更多分区来存储表的数据。分区的最大大小取决于集群中节点的SSD大小。

预配吞吐量的诀窍在于它是在分区之间划分的。因此,如果您有一个热分区,即使您的总请求没有超过总读或写吞吐量,您也可能会获得限制和ProvisionedTobputExceededExceptions。这与您的问题所问的相反。您可能会期望,如果您的表在更多分区/节点之间划分,您将获得更多吞吐量,但实际上情况正好相反,除非您根据表的大小扩展吞吐量。