Verwenden von yield mit mehreren ndb.get_multi_async

8

Ich versuche, die Effizienz meiner aktuellen Anfrage aus dem Appengine-Datastore zu verbessern. Derzeit verwende ich eine synchrone Methode:

%Vor%

Momentan gehe ich blöd durch:

%Vor%

Ich möchte dies mit get_multi_async

in eine viel schnellere Abfrage umwandeln

Meine Schwierigkeit besteht darin, wie ich das machen kann? Irgendwelche Ideen?

Beste Jon

    
Jon 11.01.2013, 00:45
quelle

3 Antworten

11

unter Verwendung der obigen Strukturen ist es möglich und wurde bestätigt, dass Sie dies mit einer Reihe von Tasklets lösen können. Es ist eine SIGNIFICANT Beschleunigung gegenüber der iterativen Methode.

%Vor%

Jetzt kommt der Hauptanruf von der Krankenhausfunktion, wo Sie das Krankenhausobjekt (hosp) haben.

%Vor%

Na los! Es ist unglaublich effizient und lässt den Zeitplan alle Informationen auf schnellstmögliche Weise innerhalb des GAE-Backbones vervollständigen.

    
Jon 14.01.2013, 06:13
quelle
3

Sie können etwas mit query.map () tun. Weitere Informationen erhalten Sie unter Category und Ссылка

    
Guido van Rossum 11.01.2013 16:01
quelle
-1

Es ist unmöglich. Ihre zweite Abfrage (ndb.get_multi (b.rooms)) hängt vom Ergebnis Ihrer ersten Abfrage ab. Also funktioniert es async dosnt, da zu diesem Zeitpunkt das (erste) Ergebnis der ersten Abfrage sowieso verfügbar sein muss. NDB macht so etwas im Hintergrund (es puffert bereits die nächsten Objekte von ndb.get_multi (currhosp.buildings), während Sie das erste Ergebnis verarbeiten). Sie können jedoch Denormalisierung verwenden, d. H. Einen großen Tisch mit einem Eintrag pro Gebäude-Raum-Bett-Paar halten und Ihre Ergebnisse aus dieser Tabelle ziehen. Wenn Sie mehr Lese- als Schreibvorgänge in dieser Tabelle haben, erhalten Sie dadurch eine enorme Geschwindigkeitsverbesserung (1 DB-Lesezugriff statt 3).

    
T. Steinrücken 11.01.2013 12:01
quelle