suv*_*suv 34 amazon-web-services amazon-dynamodb aws-sdk
我一直在浏览AWS DynamoDB文档,并且在我的生命中,无法弄清楚batchGetItem()和Query()之间的核心区别是什么.两者都根据表和索引中的主键检索项目.唯一的区别在于检索到的项目的大小,但这似乎不是突破性的差异.两者都支持条件更新.
在什么情况下我应该使用batchGetItem而不是Query,反之亦然?
ste*_*ane 32
根据官方文档:http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations
对于BatchGetItem,批处理中的每个项目都是单独读取的,因此DynamoDB首先将每个项目的大小向下舍入到下一个4 KB,然后计算总大小.结果不一定与所有项目的总大小相同.例如,如果BatchGetItem读取1.5 KB项目和6.5 KB项目,DynamoDB将计算大小为12 KB(4 KB + 8 KB),而不是8 KB(1.5 KB + 6.5 KB).
对于Query,返回的所有项都被视为单个读操作.因此,DynamoDB计算所有项目的总大小,然后向上舍入到下一个4 KB边界.例如,假设您的查询返回10个项目,其组合大小为40.8 KB.DynamoDB将操作的项目大小舍入为44 KB.如果查询返回1500个项目,每个64字节,则累计大小为96 KB.
所以,只有当你的项目都相对较大时才应该使用BatchGetItem(因此4KB的总结会产生很小的影响),并且你需要在一次调用中检索> 1MB.
在任何其他情况下,使用查询,否则你最终将被收取更多的费用;)
Mir*_*cea 19
简而言之:BatchGetItem在表上工作,并使用哈希键来标识要检索的项目.您可以在响应中获得最多16MB或100个项目
查询适用于表,本地二级索引和全局二级索引.您可以在响应中获得最多1MB的数据.最大的区别是查询支持过滤表达式,这意味着您可以请求数据,DDB将为您过滤服务器端.
如果你想要使用其中任何一个,你可能会做同样的事情,但是当你需要从DDB批量转储东西并且你需要缩小你的范围时,你可以做一个BatchGet规则想要检索(并且您希望发电机为您重复过滤数据).
其他答案缺少一个重要的区别:
仅当您要获取的项目碰巧共享一个分区(哈希)键,并且必须提供此值时,查询才有用。此外,您必须提供准确的值;您不能对分区键进行任何部分匹配。在这里,您可以为sort键指定一个附加(可能是部分/条件)值,以减少读取的数据量,并通过FilterExpression进一步减少输出。这很好,但是它有一个很大的局限性,即您无法获取驻留在单个分区之外的数据。
BatchGetItems是与此相反的一面。您可以跨多个分区(甚至跨多个表)获取数据,但是您必须知道完整且确切的主键:即分区(哈希)键和任何排序(范围)。从字面上看,就像在单个操作中多次调用GetItem。您没有Query的部分搜索和过滤选项,但您也不限于单个分区。
DynamoDB 将值存储在两种键中:单个键,称为分区键,例如"jupiter"; 或复合分区和范围键,例如"jupiter"/"planetInfo","jupiter"/"moon001"和"jupiter"/"moon002"。
ABatchGet可以帮助您同时获取大量键的值。这假设您知道要获取的每个项目的完整密钥。BatchGet("jupiter", "satrun", "neptune")因此,如果您只有分区键,或者BatchGet(["jupiter","planetInfo"], ["satrun","planetInfo"], ["neptune", "planetInfo"])使用分区+范围键,则可以执行 a 。每个项目都是独立收费的,费用与个人获得的费用相同,只是结果是批量的,并且调用节省了时间(而不是金钱)。
Query另一方面,A仅在分区 + 范围键组合内工作,可帮助您查找您不一定知道的项目和键。如果你想数木星的卫星,你会做一个Query(select(COUNT), partitionKey: "jupiter", rangeKeyCondition: "startsWith:'moon'")。或者,如果您想要获取卫星,则不。7到15你会做的Query(select(ALL), partitionKey: "jupiter", rangeKeyCondition: "BETWEEN:'moon007'-'moon015'")。在这里,您需要根据查询读取的数据项的大小付费,而不管有多少数据项。
| 归档时间: |
|
| 查看次数: |
18258 次 |
| 最近记录: |