同时查询多个分区键DynamoDB - 节点

时间:2017-03-19 22:35:36

标签: node.js amazon-dynamodb

我有一系列职位ID。

type 'a queue = Q of {estack : 'a list; dstack : 'a list} | Empty let enqueue d q = match q with | Empty -> Q {estack = [d]; dstack = []} | _ -> Q {q with estack = q.estack :: d}

目前,我循环遍历数组并对数组中的每个项执行查询以获取作业详细信息。

有没有办法使用单个查询来获取其分区键位于数组中的所有作业?

2 个答案:

答案 0 :(得分:1)

您可以使用Batch Get Item API根据关键属性(即分区键和排序键,如果可用)从DynamoDB表中获取多个项目。

答案 1 :(得分:0)

有几个选项,每个选项都有一些优点/缺点:

  1. BatchGetItem 正如@notionquest 指出的那样。这可以在一次调用中获取多达 100 个项目或 16MB 的数据,但您需要提供所有键值(如果您的表使用复合键架构,则需要为每个项目提供分区和排序) ).

  2. TransactGetItems - 这可以在一次调用中检索多达 25 个项目,顾名思义,它是事务性的,因此如果对任何正在执行的项目有另一个挂起操作,则整个操作将失败查询。这可能是好是坏,具体取决于您的用例。与 BatchGetItem 类似,您需要提供所有键属性。

  3. Query,您已经在使用。 Query 具有高性能但每个请求仅支持 1 个键(需要分区键,排序键可选)。一次最多可返回 1MB 数据,并支持分页结果。

如果您的 jobs 表具有组合键(分区 + 排序),则 Query 是性能方面的最佳选择,并且对指定排序键值没有限制。如果表只有一个分区键,那么 BatchGetItems 可能是最好的选择(假设每个作业项的大小相对较小,并且您预计返回的作业总数少于 100 个)。如果其中任何一个假设不正确,多个 Query 将是最佳选择。