2012-02-09 7 views
5

Muszę wykonać kwerendę IN na klucz atrybut. Ponieważ, Query nie zapewnia warunku IN, planuję użyć skanowania. Czy SCAN na kluczowym atrybucie przeskanuje całą tabelę?SKAN na klucz atrybut w DynamoDB

+0

Od kwietnia 2014 roku możesz używać IN w zapytaniach https://aws.amazon.com/blogs/aws/improved-queries-and-updates-for-dynamodb/ – emilyk

Odpowiedz

5

Czy skanowanie na kluczowym atrybucie przeskanuje całą tabelę?

Tak, patrz Query and Scan in Amazon DynamoDB:

skanowania

Operacja skanowania skanuje całą tabelę. Możesz określić filtry, aby zastosować do wyników, aby zawęzić wartości zwrócone do ciebie, po pełnym skanowaniu . Amazon DynamoDB nakłada limit 1 MB na skanowanie (obowiązuje limit , zanim wyniki zostaną odfiltrowane). Skanowanie może spowodować brak danych tabeli spełniających kryteria filtru.

W szczególności, nie ma żadnej różnicy pomiędzy kluczem i innych kluczowych cech w miarę Scan API to dotyczy, czyli po prostu zapewnić pożądane atrybuty po imieniu, niezależnie od ich wykorzystania jako atrybut stanowiącymi Primary Key jak dobrze lub nie:

AttributesToGet

tablicę nazw atrybutów. Jeśli nie podano nazw atrybutów, wszystkie atrybuty zostaną zwrócone. Jeśli niektóre atrybuty nie zostaną znalezione, nie pojawią się w wyniku.

+1

Szkoda. Jaka byłaby różnica kosztów między skanowaniem a zapytaniem o 100 pasujących rekordów na milion zestawów rekordów? –

+0

@Mani: Najprawdopodobniej ogromny: _SCAN_ po prostu nie jest przeznaczony do użycia w ten sposób i ma znaczący wpływ na koszty/wydajność w przypadku ogromnych zestawów rekordów, jeśli jest używany bez uwzględnienia tego w konkretny sposób - obliczenie to jest dość złożone, a także odpowiednio, przeczytaj za pośrednictwem pierwszego wpisu na blogu Chrisa Moyera w [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) do analizy, przy okazji próbki dla miliona zestawów rekordów i myśli, jak z kolei rozwiązać ten problem. –

1

Czy praca dla Ciebie nie byłaby batchGetItem?

+0

W rzeczywistości jednostka ma atrybut klucz i zakres. Tak więc jest to IN i pomiędzy warunkiem dla kluczowych atrybutów. BTW, jak korzystać z batchgetitem z klasami pojo? –

+0

@ManiDoraisamy z rozszerzonym wymaganiem Sugerowałbym wystawienie zapytania na wartość skrótu na liście IN. napisz małą aplikację, która łączy te wyniki zapytania i działa w EC2 amazonka, a Ty powinieneś złagodzić wzrost opóźnienia. alternatywnie możesz dać to drugie zadanie EMR Amazona, ponieważ _Amazon DynamoDB integruje się również z Amazon Elastic MapReduce_. – Mikha

+0

@ManiDoraisamy na twoje drugie pytanie odpowiedź brzmi: nie. 'BatchGetItemRequest' wyświetla listę maksymalnie 100' Key's. 'Klucz' zawiera' AttributeValue' zarówno dla klawisza skrótu, jak i klawisza zakresu, aby precyzyjnie zidentyfikować rekord w tabeli. Przy okazji, zapis jest w zasadzie "mapą" i Twoim obowiązkiem jest przekształcenie twoich wizów w te iz nich. – Mikha