如何更新DynamoDB中的所有记录?

时间:2017-10-21 10:35:15

标签: amazon-web-services nosql amazon-dynamodb aws-lambda

我是nosql / DynamoDB的新手。

我有一个~10 000个容器项记录的列表,每6个小时更新一次:

[
   { containerId: '1a3z5', items: ['B2a3, Z324, D339, M413'] },
   { containerId: '42as1', items: ['YY23, K132'] },
   ...
]

(主键= containerId)

  1. 删除表并使用新值重新创建是否可行?

  2. 或者我应该循环遍历新列表的每个项目,并有条件地更新/写入/删除当前的DynamoDB记录(使用批处理写入)?

2 个答案:

答案 0 :(得分:1)

对于这种情况,批量更新是更好的方法。你有2个案例:

  • 如果您只需要更新某些记录,那么批量更新会更有效。您可以扫描整个表并迭代查看记录并仅更新某些记录。
  • 如果您需要每6小时更新一次所有记录,批量更新将更有效,因为如果删除表并重新创建表,这也意味着您必须重新创建索引,这不是一个非常快速的过程。重新创建表后,您仍然需要执行插入操作,同时您必须将所有记录保存在另一个数据库或内存中。

如果您需要删除表中包含数千或更多记录的所有数据,而不是通过API删除所有记录,则删除整个表是一种很好的方法。

还有一个建议让您考虑替代方案,因为您的问题看起来不像DynamoDB的好用例。例如,MongoDB和Cassandra支持开箱即用的查询更新。

答案 1 :(得分:0)

如果更新涉及某些但不是全部现有项目,并且如果可能对“项目”进行部分更新,则您别无选择,只能执行每条记录操作。即使使用功能更强大的数据库,也是如此。

您也许可以通过首先只检索现有的containerId来加快速度,从而根据您知道要更新还是插入的那个集来进行检索。或者,您可以使用一组更新中的ID按ID进行批量检索,并且每个不返回结果的都是您必须插入的结果,而所做的是要更新的结果。