2017-03-03 7 views
0

Gibt es eine Möglichkeit, auf die global secondary index einer dynamodb Tabelle abzufragen, sagen, 1000 Datensätze zu einem Zeitpunkt und den nächsten Satz bei der nächsten Abfrage zurückgeben. Ich habe eine java application, die die Tabelle abfragt und holt alle Datensätze zugeordnet und diese verursacht Heap-Speicher Fehler auf meiner EC2-Instanz. Gibt es eine Möglichkeit, Dynamobb-Abfrageoperation wie Kinesis checkpointer zu parallelisieren. Unten ist, wie ich frage.Abfrage Dynamodb auf Index, der 1 Million Datensätze hat

DynamoDBQueryExpression<RecordsTest> queryExpression = new DynamoDBQueryExpression<RecordsTest>() 
       .withHashKeyValues(test).withConsistentRead(false); 
     List<RecordsTest> test = mapper.query(RecordsTest.class, queryExpression); for (RecordsTest tst : test) { 
      System.out.println(" record not found");} 

Auch ich habe versucht, die QuerySpec Option, aber diese gibt die gleiche Menge von Elementen aus der Tabelle, wenn ich die Grenze der Elemente angeben zurückzukehren. Ich möchte, dass die zurückgegebenen Elemente diejenigen sind, die nicht früher zurückgegeben wurden.

+0

Ein Scan wird eine paginierte Liste zurück - afaik das schon tut, was Sie hinter den Kulissen wollen. – twentylemon

+0

Ich möchte den Durchsatz berücksichtigen, den ich auf meinem Tisch bereitgestellt habe – ZZzzZZzz

Antwort

1

Abfrage API eine sequentielle auf DynamoDB Partitionen liest, auf der Partition-Start-Taste Sie in KeyConditions zur Verfügung gestellt. Wenn Sie sharding with prefixes on the partition key als Teil Ihres Schemas verwenden, können Sie Abfrage API parallel auf jeder Scherbe einer Partition Schlüssel auszuführen. Sie müssen ExclusiveStartKey bei nachfolgenden Abfrageanrufen mit dem LastEvaluatedKey des vorherigen Aufrufs festlegen, wenn Sie vermeiden möchten, dass dieselben Ergebnisse zurückgegeben werden.