Welche Auswirkungen haben Polymodelle auf die Leistung im Vergleich zu normalen Bigtable-Modellen in Google App Engine?

12

Was erzielt die beste Leistung bei normaler Verwendung von Google App Engine, einem Polymodell oder einem normalen "Bigtable" -Modell?

Das Polymodell erstellt effektiv eine Spalte in der übergeordneten Tabelle mit dem Namen "class", die die Vererbungsverfolgung bereitstellt. Während eine normale Bigtable, die von einer übergeordneten Klasse geerbt wird, eine neue und separate Datenstruktur erstellt, ohne die Möglichkeit zu haben, die übergeordneten Klassen abzufragen und alle untergeordneten Klassen aller untergeordneten Klassen zu finden.

Brian Ballsun-Stanton
quelle

Antworten:

3

Es gibt wahrscheinlich einen Leistungsunterschied, aber es ist wahrscheinlich ziemlich klein.

Folgendes habe ich gefunden (alles basiert auf Google Docs für Python ).

  1. BigTable unterstützt PolyModel-Informationen nicht nativ. Stattdessen wird es mit einer 'class'-Eigenschaft implementiert. Wenn Sie also versuchen, eine Suche durchzuführen, um beispielsweise eine Basisklasse zu finden, suchen Sie nach dieser 'class'-Eigenschaft.

  2. Bei allen Abfragen, die die PolyModel-Klasse verwenden, wird ein zusätzlicher Filter angewendet, der nach der angegebenen Klasse filtert (mithilfe der Eigenschaft 'class').

  3. Alle für eine PolyModel-Klasse erstellten Indizes müssen die zusätzliche Spalte "class" berücksichtigen.

Im Wesentlichen kümmert sich die PolyModel-Klasse selbst um die Eigenschaft 'class', fügt sie in Abfragen ein und verwendet sie für andere Abfragen. Davon abgesehen funktioniert es identisch mit der normalen Verwendung von BigTable.

Der Unterschied besteht also darin, nur eine zusätzliche Spalte hinzuzufügen und zu pflegen.

Gibt es einen Leistungsunterschied? Ja, wahrscheinlich schon. Jede Spalte, die Sie einem Datenbanksystem hinzufügen, wirkt sich auf die Leistung aus. Aber ist es wichtig? Wahrscheinlich nicht.

Richard
quelle