2016-07-15 10 views
5

Ich Abfrage der Datenspeicher, etwa wie folgt aussieht:Das Durchlaufen der Datastore-Abfrageergebnisse dauert zu lange. Gibt es eine Möglichkeit, dies zu beschleunigen?

Query<Entity> query = Query.gqlQueryBuilder(Query.ResultType.ENTITY, 
            "SELECT * FROM " + kind 
              + " WHERE Location = place").build(); 
results = datastore.run(query); 

Die Ergebnisse in einem QueryResults<Entity> results;

Dann habe ich eine Schleife durch die Ergebnisse gespeichert werden und extrahieren die Daten, die ich brauche.

Die Art hat rund 10000 Entitäten und ich extrahiere sie alle.

while (results.hasNext()) { 

    Entity result = results.next(); 
    .... 
} 

Es dauert 10-ish Sekunden, bis dies geschieht. Gibt es eine Möglichkeit, diese Zeit zu reduzieren? Ich weiß, dass das Durchschleifen der Ergebnisse die Verlangsamung verursacht.

Antwort

2

(a) Stellen Sie sicher, dass Sie beim Ausführen der Abfrage die Stapelgröße auf 500 festlegen. Standardmäßig ist es 10.

(b) Optimieren Sie Ihren eigenen Code innerhalb der Schleife. Zum Beispiel:

Entity result; 

while (results.hasNext()) { 
    result = results.next(); 
    .... 
} 
+1

Danke für die Antwort! Wo stelle ich die Batchgröße ein? –

+1

In der Low-Level-Datenspeicher-API gibt es das FetchOptions-Objekt, das Sie beim Vorbereiten einer Abfrage übergeben können. Ich sehe keine ähnliche Option in der Gcloud-API. Es kann eine gute Frage sein, das Gcloud-Team zu fragen. –

+1

Überprüfen Sie, ob Sie zur Datastore-API (https://cloud.google.com/appengine/docs/java/datastore/api-overview) wechseln können - sie ist für App Engine optimiert und ich finde sie sehr schnell. –