Jakie są implikacje wydajnościowe polimodeli w porównaniu do normalnych modeli Bigtable w Google App Engine?

12

Co zapewnia najlepszą wydajność przy zwykłym korzystaniu z Google App Engine, modelu polimodelowego lub normalnego modelu „Bigtable”?

Polimodel skutecznie tworzy kolumnę w tabeli nadrzędnej o nazwie „klasa”, która zapewnia śledzenie dziedziczenia. Podczas gdy normalny Bigtable, odziedziczony z klasy nadrzędnej, tworzy nową i oddzielną strukturę danych, bez możliwości zapytania do elementu nadrzędnego i znalezienia wszystkich elementów podrzędnych wszystkich klas podtypów.

Brian Ballsun-Stanton
źródło

Odpowiedzi:

3

Prawdopodobnie występuje różnica w wydajności, ale prawdopodobnie jest ona dość mała.

Oto, co znalazłem (wszystkie oparte na Dokumentach Google dla Pythona ).

  1. BigTable nie obsługuje natywnie informacji PolyModel. Zamiast tego jest implementowany za pomocą właściwości „class”. Tak więc, kiedy próbujesz przeprowadzić wyszukiwanie, na przykład w celu znalezienia klasy podstawowej, będziesz szukał tej właściwości „class”.

  2. Wszystkie zapytania korzystające z klasy PolyModel mają zastosowany dodatkowy filtr, który filtruje według danej klasy (przy użyciu właściwości „class”).

  3. Wszelkie indeksy utworzone dla klasy PolyModel muszą uwzględniać dodatkową kolumnę „class”.

Zasadniczo klasa PolyModel sama zajmuje się właściwością „class”, wstawiając ją do zapytań i wykorzystując do innych zapytań. Poza tym działa identycznie jak standardowe użycie BigTable.

Różnica polega na dodaniu i utrzymaniu jednej dodatkowej kolumny.

Czy istnieje różnica w wydajności? Tak, prawdopodobnie tak. Każda kolumna dodana do dowolnego systemu bazy danych będzie miała wpływ na wydajność. Ale czy to ma znaczenie? Prawdopodobnie nie.

Richard
źródło