Was ist in Google App Engine das effektivste Viele-zu-Viele-Join-Modell?


9

Das BigTable- Design lehnt viele der Philosophien relationaler Standardmodelle ab und zieht die Denormalisierung ausdrücklich einer großen Anzahl winziger Tabellen vor.

Einer der größeren Bereiche, in denen dies ein Problem darstellt, ist die Modellierung vieler bis vieler Verknüpfungen.

Eine Möglichkeit, diese Verknüpfungen zu modellieren, besteht darin, die erste Normalform zu verletzen und alle interessanten Daten in eine db.ListProperty () einzufügen. Obwohl dies über eine Abfrage durchsuchbar ist, habe ich die Auswirkungen der Suche in einer Liste auf die Leistung im Vergleich zum Abrufen einer anderen Tabelle noch nicht untersucht.

Wie verbindet nicht möglich sind, es ist möglich, Link - Tabellen durch RelationshipProperties. Daher kann mit ausreichendem Aufwand die Standardschnittstellentabelle (eine Tabelle mit einem gemeinsamen Primärschlüssel, der auf beide übergeordneten Tabellen verweist) erstellt werden. Hat jemand die Performance-Hits der verschiedenen Implementierungen untersucht?

-Bearbeiten-

Die in der Dokumentation vorgeschlagene Liste der Schlüssel ist zwar eine Möglichkeit, dies zu tun, aber ich bin an der Leistung und den Anomalieraten dieser und anderer Implementierungen interessiert. Ist es nützlich, gegenseitige Schlüssellisten zu erstellen? Ist der Aufwand für die Wiederholung den Preis wert? Gibt es einen besseren Weg, dies zu tun?

Antworten:


3

Ich arbeite gerade auch mit dem GAE-Datenspeicher. Sie sollten diesen Artikel lesen, wenn Sie dies noch nicht getan haben. Wenn Sie etwas Nützliches gefunden haben, aktualisieren Sie bitte Ihre Frage.

BEARBEITEN:

Ich habe das heute gefunden, schau es dir an.


0

Nach meiner Erfahrung mit GAE sollten Sie Tabellenabfragen sparsam verwenden. Das Hinzufügen einer "Join" -Tabelle würde die Dinge nur noch mehr verlangsamen. Wenn Sie beispielsweise Tabellen A und B haben, die eine Viele-zu-Viele-Beziehung gemeinsam haben, und Sie eine "Join" -Tabelle J mit RelationshipProperty-Feldern für A und B erstellen, müssen Sie J jedes Mal abfragen, wenn Sie suchen möchten verwandte Datensätze (Entitäten).

Es wäre viel schneller, die Liste der Schlüssel in A oder B (oder ggf. in beiden) zu haben, da sie beim Abrufen dieses Datensatzes / dieser Entität enthalten sind. Solange Sie nicht zu viele Schlüssel in der Liste haben (dh die Entität ist nicht zu groß), ist dies der richtige Weg.

Ich habe angefangen, ndb in meinen Anwendungen zu verwenden, und die Verwendung von Schlüsseln beim Abrufen von Entitäten bietet einige wesentliche Vorteile. Wenn die Entität bereits zwischengespeichert ist, wird sie zuerst aus dem Speicher oder Memcache abgerufen. Wenn sich Ihre Schlüssellisten also erheblich überschneiden, sind die Abrufe für die bereits abgerufenen Objekte viel schneller.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.