首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDB中原子计数器的可靠性

DynamoDB中原子计数器的可靠性
EN

Stack Overflow用户
提问于 2012-02-20 20:56:06
回答 3查看 31.8K关注 0票数 35

我正在考虑在我的应用程序中使用亚马逊DynamoDB,我有一个关于它的原子计数器可靠性的问题。

我正在构建一个分布式应用程序,该应用程序需要并发,而一致地使用来增加/减少存储在Dynamo属性中的计数器。我想知道Dynamo的原子计数器在一个高度并发的环境中有多可靠,那里的并发级别非常高(例如,假设平均并发命中率为20k -为了得到这个想法,每月将增加近520亿次/减少)。

计数器应该是超级可靠的,绝不能错过一次命中。有人在如此关键的环境中测试过DynamoDB吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-23 05:19:54

DynamoDB通过在多个服务器上拆分密钥来获得它的缩放属性。这类似于其他分布式数据库,如Cassandra和HBase的扩展。虽然您可以提高DynamoDB上的吞吐量,这只是将数据移动到多个服务器,现在每个服务器都可以处理全部并发连接/服务器数量。看看在他们的常见问题上,了解如何实现最大吞吐量的解释:

问:我是否总是能够达到我提供的吞吐量的水平? 亚马逊DynamoDB在所有主键上都采用相对随机的访问模式。您应该建立您的数据模型,以便您的请求能够在主键之间公平地分配通信量。如果您的访问模式非常不均衡或倾斜,则可能无法达到所提供的吞吐量水平。 在存储数据时,Amazon将表划分为多个分区,并根据主键的散列键元素分发数据。与表相关联的配置吞吐量也在分区之间进行分配;每个分区的吞吐量是根据分配给它的配额独立管理的。分区之间不共享提供的吞吐量。因此,如果工作负载均匀地分布在散列键值上,则亚马逊DynamoDB中的表最好能够满足提供的吞吐量级别。跨散列键值分发请求会跨分区分发请求,这有助于实现您的完全配置吞吐量级别。 如果您的主键之间存在不均匀的工作负载模式,并且无法达到所提供的吞吐量级别,则您可能能够通过进一步提高所提供的吞吐量级别来满足您的吞吐量需求,这将为每个分区提供更多的吞吐量。但是,建议您考虑修改请求模式或数据模型,以实现跨主键的相对随机访问模式。

这意味着拥有一个直接递增的键将不会扩展,因为该键必须驻留在一台服务器上。还有其他处理此问题的方法,例如,在内存聚合中,将增量刷新为DynamoDB (尽管这可能存在可靠性问题)或分块计数器,其中增量分散在多个键上,并通过拉动切分计数器(http://whynosql.com/scaling-distributed-counters/)中的所有键来读取。

票数 24
EN

Stack Overflow用户

发布于 2012-02-23 23:06:08

除了gigq关于可伸缩性的答案外,DynamoDBs原子增量不是幂等的,因此不可靠:如果在发出UpdateItem ADD请求后连接下降,您无法知道添加是否已提交,因此您不知道是否应该重试。

DynamoDB条件更新解决了这个问题,代价是降低了系统的可伸缩性,因为每次同时尝试对属性进行两次更改,即使在没有错误的情况下,您也必须重新尝试。

票数 11
EN

Stack Overflow用户

发布于 2018-03-20 23:31:40

如果要编写一个发电机db键,就会遇到热分区问题。每个索引的热分区问题开始于大约300 TPS。因此,如果表中有5个索引,则可能会在300/5 ~ 60 TPS左右出现热分区问题。

否则,dynamo db可伸缩到大约10-40K TPS,这取决于您的用例。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9368293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档