2013-06-19 19 views
10

Ben bunları ilişkilendirmek için bir varlığın bir anahtarının diğerinin bir özelliği olarak saklıyorum. Projenin bu noktasında bir refactor aşamasındayız, bu yüzden ataları tanıtmayı düşünüyordum. İki yaklaşım arasında bir performans farkı var mı? Ataları tanıtırsak kazanabileceğim herhangi bir avantaj var mı?Google Appengine NDB atası vs anahtar sorgu

class Book(ndb.Model): 
    ... 

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


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

1 atası sorgu yaklaşım

qry = Article.query(ancestor=book_key) 

2st basit anahtar sorgu yaklaşım

qry = Article.query(book_key=book_key) 

cevap

15

atası sorgusu her zaman tam olarak tutarlı olacaktır. Öte yandan, book_key ile sorgulama yapılması tutarlı olmayacaktır: Son değişikliklerin bu sorguda gösterilmeyeceğini görebilirsiniz. Diğer yandan, bir atağın tanıtılması, güncelleme sayısı konusunda bir sınır uygular: saniyede yalnızca bir güncelleme işlemini herhangi bir varlık grubuna (yani, ata ve çocuklarına) yapabilirsiniz.

Uygulamanızda hangisinin daha önemli olduğu sizin için bir takas.

+0

Dokümanlardaki bu sınırı (1 güncelleme/varlık grubu/saniye) görmedim - bir bağlantı sağlayabilir misiniz? Korkunç bir kota! – rattray

+2

Pratikte biraz daha fazla olsa da, saniyede 1 yazma beklemeniz gerekir. Bu numaraya sahip bir tablo bulamadım, ancak https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency ve https: // grupları hakkında daha fazla tartışma için son paragrafa göz atın. .google.com/forum/#! konu/google-appengine/llEXU-B3dQ4 –