Vraag Wat is het verschil tussen BatchGetItem en Query in DynamoDB?


Ik heb AWS DynamoDB-documenten doorgenomen en kan voor het leven van mij niet achterhalen wat het belangrijkste verschil is tussen batchGetItem () en Query (). Beide halen items op basis van primaire sleutels uit tabellen en indexen. Het enige verschil zit in de grootte van de opgehaalde items, maar dat lijkt geen baanbrekend verschil te zijn. Beide ondersteunen ook voorwaardelijke updates.

In welke gevallen moet ik batchGetItem gebruiken boven Query en omgekeerd?


24
2018-06-10 07:15


oorsprong


antwoorden:


In een notendop: BatchGetItem werkt op tabellen en gebruikt de hash-sleutel om de items te identificeren die u wilt ophalen. Je kunt tot 16 MB of 100 items krijgen in een reactie

Query werkt op tabellen, lokale secundaire indexen en globale secundaire indexen. U kunt maximaal 1 MB aan gegevens ontvangen in een reactie. Het grootste verschil is dat filterexpressies voor queryondersteuning, wat betekent dat u gegevens kunt opvragen en DDB de server voor u filtert.

Je kunt waarschijnlijk hetzelfde bereiken als je een van deze wilt gebruiken als je dat echt wilt, maar de vuistregel is dat je een BatchGet doet wanneer je bulkdingen van DDB moet dumpen en je vraagt ​​wanneer je moet specificeren wat je bent wilt ophalen (en je wilt dat de dynamo het zware werk uitvoert door de gegevens voor jou te filteren).


12
2018-06-11 05:21



Volgens de officiële documentatie: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations

Voor BatchGetItem wordt elk artikel in de batch afzonderlijk gelezen, dus DynamoDB rondt eerst de grootte van elk item af naar de volgende 4 kB en berekent vervolgens de totale grootte. Het resultaat is niet noodzakelijk hetzelfde als de totale grootte van alle items. Als BatchGetItem bijvoorbeeld een artikel van 1,5 KB en een artikel van 6,5 KB leest, berekent DynamoDB de grootte als 12 KB (4 KB + 8 KB), niet 8 KB (1,5 KB + 6,5 KB).

Voor Query worden alle geretourneerde items behandeld als één leesbewerking. Als een resultaat, berekent DynamoDB de totale grootte van alle items en rondt dan af naar de volgende 4 KB-grens. Stel dat uw vraag 10 items retourneert met een gecombineerde grootte van 40,8 kB. DynamoDB rond de artikelgrootte voor de bewerking af naar 44 KB. Als een query 1500 items van elk 64 bytes retourneert, is de cumulatieve grootte 96 kB.

U moet BatchGetItem dus alleen gebruiken als uw items allemaal relatief groot zijn (dus de 4KB-round-up heeft weinig impact) en u moet> 1 MB ophalen in één gesprek.

Gebruik in een andere situatie Query, anders wordt u uiteindelijk voor niets meer in rekening gebracht;)


21
2017-07-25 15:39