2013-06-19 15 views
10

Sto memorizzando una chiave di un'entità come una proprietà di un'altra per correlarle. Siamo in una fase di refactoring a questo punto del progetto, quindi stavo pensando di introdurre gli antenati. Esiste una differenza di prestazioni tra i due approcci? Qualunque vantaggio che potrei ottenere se introducessimo degli antenati?Google Appengine NDB antenato vs query chiave

class Book(ndb.Model): 
    ... 

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


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

primo approccio interrogazione antenato

qry = Article.query(ancestor=book_key) 

2st approccio semplice interrogazione chiave

qry = Article.query(book_key=book_key) 

risposta

15

La query antenato sarà sempre pienamente coerente. La ricerca di book_key, d'altra parte, non sarà necessariamente coerente: potresti scoprire che le modifiche recenti non verranno mostrate in quella query.

D'altra parte, l'introduzione di un antenato impone un limite al numero di aggiornamenti: è possibile eseguire solo un aggiornamento al secondo per qualsiasi gruppo di entità (cioè l'antenato e i suoi figli).

È un compromesso per voi su quale sia più importante nella vostra app.

+0

Non ho visto quel limite (1 aggiornamento/gruppo di entità/secondo) nei documenti - puoi fornire un collegamento? Qualcosa di una quota spaventosa! – rattray

+2

Dovresti aspettarti 1 scrittura al secondo, anche se potrebbe essere leggermente più pratico. Non sono riuscito a trovare un tavolo con questo numero, ma dai un'occhiata all'ultimo paragrafo su https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency e ulteriori discussioni qui https: // groups .google.com/forum/#! argomento/google-appengine/llEXU-B3dQ4 –

Problemi correlati