Jaki jest najskuteczniejszy model łączenia wielu osób w Google App Engine?

9

Projekt BigTable odrzuca wiele filozofii standardowych modeli relacyjnych, wyraźnie preferując denormalizację od wielu małych tabel.

Jednym z większych obszarów, w których jest to problem, jest modelowanie połączeń wielu do wielu.

Jednym ze sposobów modelowania tych złączeń jest naruszenie pierwszej normalnej formy i umieszczenie wszystkich interesujących danych w db.ListProperty (). Chociaż ma to możliwość wyszukiwania za pomocą zapytania, nie zbadałem jeszcze wpływu na wydajność wyszukiwania listy w porównaniu do wyciągania innej tabeli.

Jak łączy nie są możliwe, to jest możliwe do łącza tabel poprzez RelationshipProperties. Dlatego przy wystarczającym wysiłku można utworzyć standardową tabelę przecięć (tabelę ze wspólnym kluczem podstawowym, która odwołuje się do obu tabel nadrzędnych). Czy ktoś badał wyniki wydajności różnych implementacji?

-Edytować-

Chociaż lista kluczy sugerowana w dokumentacji jest rzeczywiście jednym ze sposobów, aby to zrobić, jestem zainteresowana wydajnością i szybkościami anomalii tej i innych implementacji. Czy istnieje narzędzie do tworzenia wzajemnych list kluczy? Czy wysiłek związany z powtarzaniem staje się wart swojej ceny? Czy jest na to lepszy sposób?

Brian Ballsun-Stanton
źródło

Odpowiedzi:

3

Pracuję teraz również z magazynem danych GAE, powinieneś sprawdzić ten artykuł, jeśli jeszcze tego nie zrobiłeś. Jeśli znalazłeś coś przydatnego, zaktualizuj swoje pytanie.

EDYTOWAĆ:

Znalazłem to dzisiaj, sprawdź to.

eiefai
źródło
0

Z mojego doświadczenia w GAE powinieneś oszczędnie korzystać z zapytań tabelowych. Dodanie tabeli „dołącz” jeszcze bardziej spowolniłoby sytuację. Na przykład, jeśli masz tabele A i B, które dzielą relację wiele do wielu, i utworzysz tabelę „dołącz” J z polami RelationshipProperty do A i B, będziesz musiał zapytać J za każdym razem, gdy chcesz znaleźć powiązane rekordy (podmioty).

O wiele szybciej byłoby mieć listę kluczy w A lub B (lub w obu przypadkach, jeśli to konieczne), ponieważ zostaną one uwzględnione podczas pobierania tego rekordu / bytu. Tak długo, jak nie masz zbyt wielu kluczy na liście (tzn. Encja nie jest zbyt duża), jest to odpowiednia droga.

Zacząłem używać ndb w moich aplikacjach i istnieją pewne znaczące korzyści z używania kluczy podczas pobierania jednostek. Jeśli jednostka jest już buforowana, najpierw pobierze ją z pamięci lub pamięci podręcznej. Więc jeśli na twoich listach kluczy występuje znaczne nakładanie się, pobieranie będzie znacznie szybsze dla tych podmiotów, które już zostały pobrane.

Brent Washburne
źródło