2017-01-30 91 views
0

我试图去掌握DynamoDb,并且阅读Vogels 2007 blog post,它指的是句法和语义和解方法。我的应用程序在'上次写入胜利'时会没问题,但是我想确保我没有任何冲突的项目坐在数据库中,等待'客户'来解决它们。如何指定DynamoDb的冲突解决策略? (我甚至需要吗?)

我查看了AWS API(我当时期待getItem调用返回客户端要解析的多个版本),并阅读文档和论坛,但找不到任何对此的引用。这篇文章只是指Dynamo世界中的某些东西,而不是DynamoDB,所以我不需要担心它?

回答

0

Dynamo与DynamoDB不一样。我知道它很难相信,但这是事实。如果在一致性和可用性之间做出选择,DynamoDB会偏好前者。它只是通过复制多个AZ中的数据(即可用区域)来提高可用性。

要专门回答你的问题,get-item应该总是返回记录的一个版本。您不必担心从多个版本中选择一个版本或在数据库中存在冲突的版本。

编辑:为了澄清,get-item总是返回一个版本的记录。是否是最新的取决于ConsistentRead标志,默认为false。

+0

谢谢。我有点想法,但文档并不明确,找出dynamo和dynamoDB之间的区别并不容易!很高兴有确认。再次感谢。 –

+0

GetItem可能并不总是返回最新版本的项目,具体取决于您如何调用它。请参阅下面的答案。 –

+0

你低估了那个小姐的答案?这就是编辑的建议。我实际上回答了OP的问题 –

0

GetItem API有ConsistentRead parameter。如果将其设置为false,则读取可能会转到托管项目的三个副本中的任何一个。如果将其设置为true,则读取将始终发送给主设备,并且您将始终获取该项目的最新版本。最后,当您将ConsistentRead设置为false时,允许您为1个RCU(读取容量单位)读取两倍的数据(8KB),因此读取在最终一致时更便宜。