2016-03-23 11 views
1

Ich habe einfach DynamoDB Modell bekam:DynamoDB alle Ergebnisse angezeigt sortiert

id (partition key), timestamp_id (sort key) 

Alles, was ich einfach will, ist aus Dynamo alle Daten zu erhalten (mit Limit und so weiter), sondern durch timestamp_id sortiert. Ein Scan gibt leider keine sortierten Daten zurück, und es scheint, dass ich keine leere Abfrage haben kann, es sei denn, ich verpasse etwas.

+0

DynamoDB nicht diesen Anwendungsfall nicht unterstützt. Wenn Sie sich in dieser Situation befinden, müssen Sie die Partitionsschlüssel in einem separaten Datenspeicher speichern und diese zuerst abrufen. Dann können Sie Abfragen für jeden Schlüssel der Reihe nach ausgeben und alle Daten Ihrer Tabelle erhalten –

+0

Ich habe das gleiche Problem. Haben Sie zufällig eine Lösung gefunden? Danke – jurer

Antwort

0

Sie können nicht alle Ihre Datensätze nach Timestamp_id sortiert bekommen.

Sie können timestamp_id nur nach 'ID' sortiert bekommen.

dynamodb sortieren Sie Ihre Ergebnisse nach Ihrem zusammengesetzten Schlüssel.

so in Ihrem Fall, wenn Ihre Zeilen wie folgt aussehen:

1,3 
1,2 
2,4 
1,5 
2,3 

die Ergebnisse in Ihrem Fall ist:

1,2 
1,3 
1,5 
2,3 
2,4 

wie Sie sehen, das Ergebnis nicht nur von timestamp_id sortiert werden, aber ID- timestamp_id.

+0

Und wie sieht diese Abfrage aus? –

+0

Es ist keine Abfrage, sondern ein Scan und dieses Beispiel lässt es fälschlicherweise so aussehen, als würden Sie Ihre Artikel nach Schlüssel sortiert zurück bekommen, was nicht der Fall ist. Während Sie Artikel anfordern können, die nach Bereichsschlüssel sortiert werden, erhalten Sie 2,3, 2,4, gefolgt von 1,2,13,1,5 –

-1

können Sie erstellen ein GSI (lass es timestamp_id-index nennen):

Wir unseren Index der Partition Schlüssel angeben wird ein Attribut namens fixed_val und unsere Sortierschlüssel timestamp_id-index sein zu sein.

fixed_val enthält jeden Wert, den Sie möchten, aber es muss immer dieser Wert sein, und Sie müssen es von der Clientseite kennen. Für dieses Beispiel nehmen wir an, dass fixed_val immer 1 ist.

GSI-Schlüssel müssen nicht eindeutig sein, also keine Sorge, wenn es zwei duplizierte timestamp_id Werte gibt.

Sie würden die Tabelle wie folgt abfragen:

var now = Date.now(); 

//... 

{ 
    TableName: "foo", 
    IndexName: "timestamp_id-index", 
    ExpressionAttributeNames: { 
     "#f": "fixed_value" 
    }, 
    ExpressionAttributeValues: { 
     ":f": 1, 
    }, 
    KeyConditionExpression: "#f = :f", 

    // true -> ascending, false -> descending 
    ScanIndexForward: true 
} 
+0

Es ist nicht gut, den Partitionsschlüssel als einen einzigen Wert zu haben. er wird viele Durchsatzfehler bekommen ... –

+0

@EyalCh Niemals gesagt, dass es eine gute Idee war. ** Noch **, es ist eine Problemumgehung für sein Problem, ohne das Tabellenlayout neu entwerfen zu müssen –

+0

Das ist eine schreckliche Idee (um einen Index mit einem einzigen Wertschlüssel zu erstellen), für alles außer die trivialsten Arbeitsbelastungen - in diesem Fall Sie könnte sowieso nur scannen und sortieren. –

Verwandte Themen