piz*_*r0b 7 node.js amazon-dynamodb
我有一组工作 ID。
[ '01', '02', '03', '04' ]
目前我正在遍历数组并为数组中的每个项目执行查询以获取作业详细信息。
有没有办法使用单个查询来获取分区键在数组中的所有作业?
ake*_*rra 10
有几种选择,每种都有一些优点/缺点:
BatchGetItem正如@notionquest 指出的。这可以在一次调用中获取最多 100 个项目或 16MB 数据,但您需要提供所有键值(如果您的表使用复合键架构,则对每个项目进行分区和排序)。
TransactGetItems- 这可以在一次调用中检索最多 25 个项目,顾名思义,它是事务性的,因此如果正在查询的任何项目上有另一个挂起的操作,则整个操作将失败。这可能是好是坏,具体取决于您的用例。与 类似BatchGetItem,您需要提供所有关键属性。
Query,您已经在使用。查询性能很高,但每个请求仅支持 1 个键(需要分区键,排序键可选)。一次最多返回1MB的数据,并支持分页结果。
如果您的jobs表具有复合键(分区+排序),则Query在性能方面是最佳选择,并且对指定排序键值没有限制。如果表只有一个分区键,那么BatchGetItems可能是最好的选择(假设每个作业项的大小相对较小,并且您预计返回的作业总数少于 100 个)。如果这些假设中的任何一个不正确,则多个Querys 将是最佳选择。
您可以使用Batch Get ItemAPI 根据键属性(即分区键和排序键,如果可用)从 DynamoDB 表中获取多个项目。
您可以将partiQL用于此用例:
SELECT *
FROM <TABLE_NAME>
WHERE "Id" IN [ARRAY]
Run Code Online (Sandbox Code Playgroud)
但请注意,partiQL 有长度限制:最小长度为 1。最大长度为 8192。
let statement = {
"Statement": "SELECT * \nFROM <TABLE_NAME> \nWHERE \"Id\" IN [ARRAY]"
}
let result = await dynamoDbClient.executeStatement(statement).promise();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6016 次 |
| 最近记录: |