2016-05-16 5 views
1

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu lesen.Dynamodb kann ich mit zwei GSIs abfragen?

Mein Szenario ist dies. Ich habe einen Geopoints-Tisch in dynamodb.

Es besteht aus:
object_type (String HASH)
id (String RANGE)
lat (Anzahl GSI RANGE)
lng (Anzahl GSI RANGE)

Es hat Indizes:
object_type -lat-Index (object_type-Hash-lat-Bereich)
object_type-lng-Index (object_type-Hash-lng-Bereich)

Was ich tun möchte:
IndexName: "object_type-lat-index", KeyConditionExpression: "object_type=:otype AND (lat BETWEEN :llat AND :glat) AND (lng BETWEEN :llng AND :glng)", Ich möchte in der Lage sein, lat und lng zur Abfrage durch die Betweens von mindestens lat und größer lat, und am wenigsten lng und mehr lng

immer scheinen

Ich kann es nicht in den DynamoDB docs zu finden. Kann dies getan werden oder führe ich es richtig um? Da der Fehler so etwas wie zurückkehrt ‚Kann nur 1 oder 2 Bedingungen‘

Antwort

2

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html

Die Funktionsweise ist die Abfrage funktioniert für die Tabelle selbst (die Schlüssel in der Tabelle definiert) oder ein GSI. Sie können mehrere GSIs und die Tabelle HK nicht in derselben Abfrage kombinieren.

2 Möglichkeiten:
1) durchführen 2 Abfragen für den 2-Indizes und die Ergebnisse auf dem Client
2 schneiden) führen Sie eine 1-Abfrage für einen der Indizes w/a Filterausdruck, mit dem anderen Ausdruck funktioniert (also im Grunde, zum Beispiel: Frage nach lat mit einem Filter für lange).

+0

Danke! Im tun Option 2 – taptipblard

+0

Wird es die Lesedurchsatzgröße wie beabsichtigt reduzieren? Was möchte ich fragen, ist die Größe des Ergebnisses (Verbrauch von RTUs) das Ergebnis nach der Anwendung von Filtern oder vor der Anwendung von Filtern? – Sudip