2009-10-03 21 views
6

Mam aplikację, która, jeśli jestem uczciwa, naprawdę nie potrzebuje integralności transakcyjnej (wiele aktualizacji, żadna z nich nie jest krytyczna). Tak więc planowałem po prostu opuścić grupy jednostek na razie. Ale nadal chciałbym to zrozumieć (pochodząc z relacyjnego tła).Grupy podmiotów w Google App Engine Datastore

Sposób w jaki widzę, wszystkie zapytania do mojej aplikacji będą dotyczyły użytkownika. Dlatego nie muszę grupować żadnych jednostek wyższych niż użytkownik, zgodnie z docs recommendations. Ale nie planowałem posiadania określonej jednostki użytkownika, zamiast polegać na UserProperty w samych podmiotach.

Sposób, w jaki go widzę, jeśli chcę transakcji (dla każdego użytkownika), będę potrzebował jakiegoś rodzaju użytkownika root jako nadrzędnego dla wszystkich podmiotów, które są częścią hierarchii jej danych, bez względu na to, jak cienka byłaby ta istota, tzn. w zasadzie żadne własności.

Czy to prawda?

Przeprosiny dla verboseness, tylko naprawdę ping-schematu, co faktycznie oznaczało mniej w praktyce dzisiaj wieczorem ...

Odpowiedz

3

Jesteś zasadniczo poprawne. Musisz je zgrupować, jeśli chcesz mieć możliwość transakcyjną. Można jednak pogrupować kilka elementów bez tworzenia rzeczywistej encji głównej, w sensie encji w magazynie danych. Zamiast tego tworzysz wirtualny element główny. Jednym z ważnych przypadków użycia tej funkcji jest możliwość utworzenia obiektu potomnego przed utworzeniem go jako elementu nadrzędnego.

Można utworzyć jednostkę o drodze przodka, nie tworząc najpierw jednostki dominującej. Aby to zrobić, należy utworzyć klucz dla przodka, używając nazwy rodzaju i klucza, a następnie użyć go jako rodzica nowej jednostki. Wszystkie jednostki z tym samym przodkiem głównym należą do tej samej grupy encji, niezależnie od tego, czy czy nie, katalog główny reprezentuje rzeczywistą encję .

Ten cytat pochodzi z the same doc you linked to.

11

Tak jak ja to widzę, jeśli chcę transakcji (na podstawie liczby użytkowników), będę potrzebował jakiegoś podmiotu użytkownik root jako rodzica wszystkich podmiotów, które są częścią hierarchii jej danych, bez względu na to, jak cienka byłaby ta istota, tzn. w zasadzie brak właściwości.

Nie chcę po prostu utworzyć jednostki użytkownika root i wyrzucić wszystko w jej grupie encji. Zastanów się, do czego potrzebujesz transakcji. Jeśli nie masz żadnych właściwości na swoim podmiocie użytkownika, z czym byś korzystał w transakcjach?

Nie wiem o twoich danych, ale załóżmy, że to system blogów i masz użytkowników, posty i komentarze. Model Post zawiera liczbę_komów, więc nie musisz ich liczyć. Możesz chcieć transakcji, aby zapewnić, że podczas tworzenia komentarza, właściwość number_of_comments może być bezpiecznie aktualizowana.

W tym przypadku niepotrzebne narzekanie byłoby mieć wszystkich użytkowników posty i komentarze w jednej grupie encji. Zamiast tego możesz publikować komentarze w tej samej grupie elementów co wpis, do którego należą. Nie byłoby potrzeby umieszczania postów w tej samej grupie, co użytkownik, a w rzeczywistości byłby to zły pomysł, ponieważ komentarze umieszczone w dowolnym poście użytkowników miałyby tendencję do pisania tej samej grupy encji.

Napisałem dzisiaj na blogu short article about entity groups. Może się przydać.