dynamodb扫描表

时间:2016-01-17 07:41:39

标签: amazon-dynamodb aws-sdk

我在dynamodb中有一个表,服务器一直在写入表。 同时,我使用另一个工作线程继续使用LastEvaluatedKey对该表执行扫描。我的问题是,扫描最终会从表中获取所有项目吗?它会错过任何项目,因为其他主题日复一日地写入表中。

谢谢, 易

1 个答案:

答案 0 :(得分:1)

是肯定的。在某些情况下,你可以错过物品。

在哈希范围术语中,LastEvaluatedKey实际上是最后看到的范围值。 dynamo按范围值对响应进行排序(如果是,则按数字排序,如果是字符串,则按str表示值对响应进行排序)。

所以例如: 如果你的表值是:

哈希,范围

1,'a'

1,'b'

1,'c'

1,'r'

1,'x'

然后你的第一次扫描可以返回你((1,a),(1,b),(1,c),(1,r)) 这里你的LastEvaluatedKey是'r',你的扫描从这一点开始继续

现在,如果一个新项目(1,d)插入到表格中,它将插入(1,c)和(1,r)之间,你的扫描将会错过它,因为他继续从(1,r) ,并将返回给你(1,x)

所以我推荐你的最佳解决方案:

  1. use dynamodb stream - 使用lambda读取更新记录,并根据它们更新新表
  2. 迁移 - 在运行扫描操作之前,插入一个代码,将任何更新/删除写入您的两个表,然后您就可以开始扫描,并保证不会丢失任何值。
  3. 希望它有所帮助。