我有一系列职位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}
目前,我循环遍历数组并对数组中的每个项执行查询以获取作业详细信息。
有没有办法使用单个查询来获取其分区键位于数组中的所有作业?
答案 0 :(得分:1)
您可以使用Batch Get Item
API根据关键属性(即分区键和排序键,如果可用)从DynamoDB表中获取多个项目。
答案 1 :(得分:0)
有几个选项,每个选项都有一些优点/缺点:
BatchGetItem
正如@notionquest 指出的那样。这可以在一次调用中获取多达 100 个项目或 16MB 的数据,但您需要提供所有键值(如果您的表使用复合键架构,则需要为每个项目提供分区和排序) ).
TransactGetItems
- 这可以在一次调用中检索多达 25 个项目,顾名思义,它是事务性的,因此如果对任何正在执行的项目有另一个挂起操作,则整个操作将失败查询。这可能是好是坏,具体取决于您的用例。与 BatchGetItem
类似,您需要提供所有键属性。
Query
,您已经在使用。 Query 具有高性能但每个请求仅支持 1 个键(需要分区键,排序键可选)。一次最多可返回 1MB 数据,并支持分页结果。
如果您的 jobs
表具有组合键(分区 + 排序),则 Query
是性能方面的最佳选择,并且对指定排序键值没有限制。如果表只有一个分区键,那么 BatchGetItems
可能是最好的选择(假设每个作业项的大小相对较小,并且您预计返回的作业总数少于 100 个)。如果其中任何一个假设不正确,多个 Query
将是最佳选择。