I\'ve been going through AWS DynamoDB docs and, for the life of me, cannot figure out what\'s the core difference between batchGetItem() and Query(). Both retrieve items bas
DynamoDB stores values in two kinds of keys: a single key, called a partition key, like "jupiter"
; or a compound partition and range key, like "jupiter"/"planetInfo"
, "jupiter"/"moon001"
and "jupiter"/"moon002"
.
A BatchGet
helps you fetch the values for a large number of keys at the same time. This assumes that you know the full key(s) for each item you want to fetch. So you can do a BatchGet("jupiter", "satrun", "neptune")
if you have only partition keys, or BatchGet(["jupiter","planetInfo"], ["satrun","planetInfo"], ["neptune", "planetInfo"])
if you're using partition + range keys. Each item is charged independently and the cost is same as individual gets, it's just that the results are batched and the call saves time (not money).
A Query
on the other hand, works only inside a partition + range key combo and helps you find items and keys that you don't necessarily know. If you wanted to count Jupiter's moons, you'd do a Query(select(COUNT), partitionKey: "jupiter", rangeKeyCondition: "startsWith:'moon'")
. Or if you wanted the fetch moons no. 7 to 15 you'd do Query(select(ALL), partitionKey: "jupiter", rangeKeyCondition: "BETWEEN:'moon007'-'moon015'")
. Here you're charged based on the size of the data items read by the query, irrespective of how many there are.