2016-06-10 15 views
1

Eine Abfrage Ergebnis kommt in Form von Liste der Map<String, AttributeValue>,AWS DynamoDB queryresult Umstellung auf Json

Um ein einzelnes Map<String, AttributeValue> zu einem JSON den einzigen Weg konvertiert ich gefunden habe, ist über jede Taste in der Karte iterieren , und erstellen Sie die JSON-Zeichenfolge.

final ObjectNode node = JsonNodeFactory.instance.objectNode(); 

for (final Entry<String, AttributeValue> entry : item.entrySet()) { 
    node.put(entry.getKey(), getJsonNode(entry.getValue(), depth + 1)); 
} 

Gibt es einen effizienteren Weg, dies zu erreichen? Gibt es eine Möglichkeit, ein Ergebnis von dynamoDB als JSON zu erhalten?

Antwort

0

Ich fand heraus, was los war. AWS DynamoDB-Dokumentation muss aktualisiert werden. (Z) http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Query

AWS DynamoDB java api bietet 3 Möglichkeiten hierfür Anfragen, queryresult, QuerySpec und Scan.
Dort Dokumentation unterscheidet nicht klar zwischen QueryResult/QuerySpec. Sie geben verschiedene Objekte zurück und verhalten sich intern sehr unterschiedlich. QueryResult gibt eine Map zurück, die nicht effizient in json konvertiert werden kann. QuerySpec gibt AWS ITEMS zurück, die schnell in JSON-Zeichenfolgen konvertiert werden können. Sie geben in Docs an, dass Abfragen (im Allgemeinen) maximal Datenrückgabegröße von 1 MB pro Abfrage haben. Wenn Sie also mehr abrufen müssen, müssen Sie Folgendes tun nachfolgende Anrufe. Was ich gefunden habe ist, dass dies nur für QueryResult Abfrage-Methode, die eine LastEvaluatedKey enthält, die verwendet werden, um herauszufinden, die nächste "Seite" abzurufen, wenn mehr Daten verfügbar ist, gilt. Die QuerySpec-Methode enthält jedoch nicht den LastEvaluatedKey, der mich verwirrt hat. Dann habe ich herausgefunden, dass QuerySpec die Daten scheinbar für Sie paginiert. Ich konnte 4Mb mit einem einzigen Anruf,

zurückgeben