2013-06-19 12 views
10

Ich speichere einen Schlüssel einer Entität als eine Eigenschaft einer anderen, um sie in Beziehung zu setzen. Wir befinden uns an diesem Punkt des Projekts in einer Refaktor-Phase, also habe ich über die Einführung von Vorfahren nachgedacht. Gibt es einen Leistungsunterschied zwischen den beiden Ansätzen? Welche Vorteile habe ich, wenn wir Vorfahren vorstellen?Google Appengine NDB Vorfahren vs Schlüsselabfrage

class Book(ndb.Model): 
    ... 

class Article(ndb.Model: 
    book_key = ndb.KeyProperty(kind=Book, required=True) 


book_key = ndb.Key("Book", 12345) 

erster Vorfahren Abfrage Ansatz

qry = Article.query(ancestor=book_key) 

2st einfache Tastenabfrage Ansatz

qry = Article.query(book_key=book_key) 

Antwort

15

Der Vorfahr Abfrage wird immer voll im Einklang steht. Das Abfragen durch book_key ist jedoch nicht unbedingt konsistent: Möglicherweise werden kürzlich vorgenommene Änderungen in dieser Abfrage nicht angezeigt.

Auf der anderen Seite begrenzt die Einführung eines Vorfahren die Anzahl der Aktualisierungen: Sie können nur eine Aktualisierung pro Sekunde für eine Entitätsgruppe (dh den Vorgänger und seine Kinder) durchführen.

Es ist ein Kompromiss für Sie, welcher in Ihrer App wichtiger ist.

+0

Ich habe diese Grenze (1 Update/Entity Group/Sekunde) in den Dokumenten nicht gesehen - können Sie einen Link zur Verfügung stellen? Etwas von einer beängstigenden Quote! – rattray

+2

Sie sollten 1 Schreibvorgang pro Sekunde erwarten, obwohl es in der Praxis etwas mehr sein könnte. Ich konnte keine Tabelle mit dieser Nummer finden, aber werfen Sie einen Blick auf den letzten Absatz unter https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency. Weitere Informationen finden Sie unter https: // groups .google.com/forum/#! topic/google-appengine/lleEXU-B3dQ4 –