2011-08-07 9 views
5

Próbuję zrozumieć, kiedy użyć podmiot "rodzic" na GAE. Czy jest to użyteczne tylko w przypadku odpytywania (tj. Pobierania wszystkich obiektów Foo, w których rodzic == someObj) lub czy dziecko ma dostęp do jednostki nadrzędnej, podobnie jak obiekt ReferenceProperty?AppEngine - Kiedy użyć relacji z rodzicem?

Kiedy lepiej używać rodzica vs ReferenceProperty?

Odpowiedz

5

Jedyny przypadek, w którym należy używać grup encji (czyli wszystkich podmiotów posiadających wspólny formularz rodzica), służy do zapewnienia bezpieczeństwa transakcji. Jeśli chcesz zaktualizować wiele rekordów w transakcji, wszystkie muszą mieć tę samą jednostkę główną. Powodem, dla którego nie wystarczy umieścić wszystkich swoich jednostek pod jednym rodzicem, jest fakt, że aktualizacje grupy podmiotów są ograniczone do około 1 na sekundę. Aby uzyskać więcej informacji, zobacz this section dokumentacji.

Jednostka może uzyskać dostęp do obiektu nadrzędnego za pomocą this.parent, ale nie ma w tym nic szczególnego - to tylko cukier syntaktyczny dla db.get(this.key().parent()).

+0

Lub dla silnej spójności odczytu z HRD, prawda? –

+0

@Drew Tak, ale to jest rozszerzenie transakcji. –

1

Wszystko, co czytam, jest przeciwko jednostkom nadrzędnym z jednego powodu, i to jest, gdy coś modyfikujesz w tym drzewie, wszystko jest zablokowane.

Kiedy po raz pierwszy zacząłem pracować z obiektami nadrzędnymi, chciałem traktować je jak nagłówek gałęzi lub bazę zlokalizowaną wokół tego wpisu nadrzędnego, ale najwyraźniej to nie jest sposób, w jaki są one wykonywane. Prawdopodobnie chcesz po prostu użyć ReferenceProperty, ponieważ pozwoli ci to na dostęp do rodzica i nie spowoduje, że blokowanie będzie kontynuowane.

Oczywiście, jeśli chcesz tego rodzaju blokowanie relacji, to może chcesz tego, ale nie byłeś wystarczająco dokładny, żeby to ocenić.

Powiązane problemy