2016-07-15 93 views
5

Sto interrogando il datastore che sembra qualcosa di simile:Il looping attraverso i risultati della query Datastore richiede troppo tempo. C'è un modo per accelerare questo?

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

I risultati vengono memorizzati in un QueryResults<Entity> results;

Poi ho un ciclo tra i risultati ed estrarre i dati di cui ho bisogno.

Il tipo ha circa 10000 entità in esso e le sto estraendo tutte.

while (results.hasNext()) { 

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

Sono necessari 10 secondi perché ciò si verifichi. C'è un modo per ridurre questo tempo? So che il looping dei risultati sta causando il rallentamento.

risposta

2

(a) Assicurarsi di impostare la dimensione del batch su 500 quando si esegue la query. Per impostazione predefinita, è 10.

(b) Ottimizza il tuo codice all'interno del ciclo. Ad esempio:

Entity result; 

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

Grazie per la risposta! Dove posso impostare la dimensione del lotto? –

+1

Nell'API Datastore di basso livello è presente l'oggetto FetchOptions che è possibile passare durante la preparazione di una query. Non vedo un'opzione simile nelle API di Gcloud: potrebbe essere una buona domanda da porre al team di Gcloud. –

+1

Verifica se puoi passare all'API Datastore (https://cloud.google.com/appengine/docs/java/datastore/api-overview): è ottimizzato per App Engine e lo trovo molto veloce. –

Problemi correlati