2015-06-10 8 views
21

Ho esaminato i documenti di AWS DynamoDB e, per la vita di me, non riesco a capire qual è la differenza principale tra batchGetItem() e Query(). Entrambi recuperano elementi basati su chiavi primarie da tabelle e indici. L'unica differenza è nella dimensione degli oggetti recuperati ma non sembra una differenza fondamentale. Entrambi supportano anche aggiornamenti condizionali.Qual è la differenza tra BatchGetItem e Query in DynamoDB?

In quali casi dovrei utilizzare batchGetItem su Query e viceversa?

risposta

10

In breve: BatchGetItem funziona su tabelle e utilizza la chiave hash per identificare gli elementi che si desidera recuperare. È possibile ottenere fino a 16 MB o 100 elementi in una risposta

La query funziona su tabelle, indici secondari locali e indici secondari globali. Puoi ottenere al massimo 1 MB di dati in una risposta. La più grande differenza è che le espressioni di filtro del supporto di query, il che significa che è possibile richiedere i dati e DDB filtrerà il lato server per voi.

Probabilmente si può ottenere lo stesso risultato se si desidera utilizzare uno di questi se lo si desidera realmente, ma la regola del pollice è che si esegue un BatchGet quando è necessario eseguire il dump di materiale in blocco da DDB e si esegue una query quando è necessario restringi quello che vuoi recuperare (e vuoi che la dinamo faccia il pesante sollevamento filtrando i dati per te).

17

Secondo la documentazione ufficiale: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations

Per BatchGetItem, ciascun elemento del batch viene letto separatamente, così DynamoDB arrotonda prima la dimensione di ogni elemento all'altro 4 KB e quindi calcola il totale dimensione. Il risultato non è necessariamente uguale alla dimensione totale di tutti gli articoli. Ad esempio, se BatchGetItem legge un elemento da 1,5 KB e un articolo da 6,5 ​​KB, DynamoDB calcolerà le dimensioni come 12 KB (4 KB + 8 KB), non 8 KB (1,5 KB + 6,5 KB).

Per Query, tutti gli elementi restituiti vengono considerati come un'operazione di lettura singola. Di conseguenza, DynamoDB calcola la dimensione totale di tutti gli elementi e quindi arrotonda al prossimo limite di 4 KB. Ad esempio, supponiamo che la query restituisca 10 elementi la cui dimensione combinata sia 40,8 KB. DynamoDB arrotonda la dimensione dell'articolo per l'operazione a 44 KB. Se una query restituisce 1500 voci di 64 byte ciascuna, la dimensione cumulativa è 96 KB.

Quindi, è necessario utilizzare BatchGetItem solo se gli oggetti sono tutti relativamente grandi (in modo che il 4KB round-up ha un impatto limitato), ed è necessario recuperare> 1MB in una sola chiamata.

In qualsiasi altra situazione, utilizzare Query, altrimenti si finirà per essere addebitato molto di più per niente;)

+5

Mentre questa risposta ben spiega come funziona prezzi per DynamoDB, è una sorta di fuorviante, nel senso che sembra per dare l'impressione che la query possa potenzialmente essere utilizzata per sostituire BatchGet. La mia comprensione è che non può. Vedi [questa risposta] (http://stackoverflow.com/questions/31633141/batchgetitem-or-query-dynamodb-query-by-range) – mindreader