2012-02-09 13 views
5

Ho bisogno di eseguire una query IN sull'attributo chiave. Poiché, Query non fornisce la condizione IN, sto pianificando di utilizzare la scansione. SCAN sull'attributo chiave eseguirà la scansione dell'intera tabella?SCAN sull'attributo chiave in DynamoDB

+0

A partire da aprile 2014, è possibile utilizzare IN nelle query https://aws.amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/ – emilyk

risposta

5

Lo SCAN sull'attributo chiave eseguirà la scansione dell'intera tabella?

Sì, vedi Query and Scan in Amazon DynamoDB:

Scan

Un'operazione di scansione passa l'intera tabella. È possibile specificare i filtri su applicabili ai risultati per perfezionare i valori restituiti, dopo la scansione completa . Amazon DynamoDB applica un limite di 1 MB alla scansione (il limite si applica prima che i risultati vengano filtrati). Una scansione non può dare luogo a dati della tabella che soddisfano i criteri del filtro.

particolare, non v'è alcuna differenza tra chiave e non chiave attributi fino al Scan API è interessato, cioè è sufficiente fornire gli attributi desiderati per nome, siano esse utilizzato come attributo costituente il Primary Key pure o non:

AttributesToGet

Array dei nomi degli attributi. Se i nomi degli attributi non sono specificati, verranno restituiti tutti gli attributi. Se alcuni attributi non vengono trovati, non verranno visualizzati nel risultato.

+1

Peccato. Quale sarebbe la differenza di costo tra scansione e query per 100 record corrispondenti su un milione di recordset? –

+0

@Mani: molto probabilmente enorme: _SCAN_ non è progettato per essere utilizzato in questo modo e ha implicazioni significative sui costi/prestazioni per enormi recordset, se utilizzato senza tener conto di ciò in modo specifico - il calcolo di questo è piuttosto complesso e di conseguenza, si prega di leggere attraverso il primo post sul blog di Chris Moyer su [Amazon DynamoDB] (http://blog.coredumped.org/2012/01/amazon-dynamodb.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ChrisMoyer+%28Chris+Moyer%29) per un'analisi, incidentalmente un campione per un milione di recordset e pensieri su come spiegare a turno questo problema. –

1

non sarebbe batchGetItem lavoro per voi?

+0

In realtà, l'entità ha un attributo chiave e un intervallo. Quindi è un IN e una condizione tra gli attributi chiave. A proposito, come usi batchgetitem con le classi pojo? –

+0

@ManiDoraisamy dato il requisito avanzato, suggerirei di inviare una query per valore di chiave hash nell'elenco IN. scrivere una piccola app che unisce i risultati di questa query e viene eseguita nell'EC2 di Amazon e si dovrebbe alleviare l'aumento della latenza. in alternativa puoi dare questo ultimo compito all'EMR di Amazon poiché _Amazon DynamoDB si integra anche con Amazon Elastic MapReduce_. – Mikha

+0

@ManiDoraisamy alla tua seconda domanda la risposta è che non lo fai. 'BatchGetItemRequest' visualizza un elenco di fino a 100' Key's. la chiave '' contiene 'AttributeValue' sia per la chiave hash che per la chiave di intervallo per identificare con precisione un record in una tabella. btw, un record è essenzialmente una 'Mappa 'ed è tua responsabilità convertire i tuoi pojos dentro e fuori di quelli. – Mikha