2013-06-19 20 views
10

Przechowuję klucz podmiotu jako własność innej osoby w celu powiązania ich. Jesteśmy na etapie refaktoryzacji w tym momencie projektu, więc myślałem o wprowadzeniu przodków. Czy występuje różnica w wydajności między tymi dwoma podejściami? Jakieś korzyści, które mógłbym uzyskać, gdybyśmy wprowadzili przodków?Google Appengine NDB ancestor vs key query

class Book(ndb.Model): 
    ... 

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


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

1-ta podejście zapytania przodek

qry = Article.query(ancestor=book_key) 

2st prosty klucz podejście zapytania

qry = Article.query(book_key=book_key) 

Odpowiedz

15

Zapytanie przodek zawsze będą w pełni zgodne. Z drugiej strony zapytanie o numer book_key niekoniecznie musi być spójne: może okazać się, że ostatnie zmiany nie będą wyświetlane w tym zapytaniu.

Z drugiej strony, wprowadzenie przodka nakłada ograniczenie liczby aktualizacji: można wykonać jedną aktualizację na sekundę dla dowolnej grupy encji (tj. Przodka i jego potomków).

To kompromis dla Ciebie, który z nich jest ważniejszy w Twojej aplikacji.

+0

Nie widziałem tego ograniczenia (1 aktualizacja/grupa encji/sekundę) w dokumentach - czy możesz podać link? Coś przerażającego limitu! – rattray

+2

Powinieneś spodziewać się 1 zapisu na sekundę, choć może to być nieco więcej w praktyce. Nie udało mi się znaleźć tabeli z tym numerem, ale spójrz na ostatni akapit na https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency i przejdź dalej tutaj https: // groups .google.com/forum/#! topic/google-appengine/llEXU-B3dQ4 –

Powiązane problemy