Frage

Kann jemand zeigen, wie ich speichern und abfragen leicht hierarchische Daten in Google App Engine-Datenspeicher?

War es hilfreich?

Lösung

Die beste Option hängt von Ihren Anforderungen. Hier ein paar Lösungen (Ich gehe davon aus Sie Python verwenden, da Sie nicht angegeben haben):

  1. Wenn Sie Transaktions Updates auf einem ganzen Baum tun müssen, und du wirst nicht mehr als etwa 1QPS anhaltenden Updates zu einem Baum, können Sie die eingebaute Unterstützung verwenden für heirarchial Lagerung. Wenn ein Unternehmen zu schaffen, können Sie die „Eltern“ Attribut übergeben eine übergeordnete Entität oder Schlüssel zu spezifizieren, und bei der Abfrage können Sie die .ancestor () -Methode verwenden (oder in GQL ‚Vorfahr‘ alle Nachkommen einer bestimmten Entität abzurufen .
  2. Wenn Sie nicht transaktionale Updates brauchen, können Sie die Funktionalität von Entitätsgruppen ohne die Konkurrenzfragen (und Transaktionssicherheit) replizieren: Fügen Sie eine db.ListProperty (db.Key) zu Ihrem Modell ‚Vorfahren‘ genannt, und bevölkern es mit der Liste der Vorfahren des Objekts Sie Einfügen. Dann können Sie einfach alles abrufen, die von einem bestimmten Vorfahren mit MyModel.all (). Filter ( ‚Vorfahren =‘, parent_key).
  3. abstammt
  4. Wenn Sie keine Transaktionen benötigen, und Sie kümmern sich nur um die direkten Kinder eines Unternehmens Abrufen (nicht alle Nachkommen), verwenden Sie den oben skizzierten Ansatz, aber anstelle eines Listproperty nur eine Reference der Muttergesellschaft nutzen. Dies wird als Adjazenzliste bekannt.

Es gibt auch andere Ansätze zur Verfügung, aber die drei sollten die häufigsten Fälle abdecken.

Andere Tipps

Nun, sollten Sie versuchen, Ihre Daten so linear wie möglich zu halten. Wenn Sie schnell brauchen, um eine Baumstruktur von Daten abfragen, würden Sie entweder in der Datenbank gebeizt speichern (oder JSON-codiert, wenn Sie bevorzugen), wenn das möglich ist für Ihre Daten, oder würden Sie Baum-Indizes erzeugen müssen, die können schnell verwendet werden, um ein Stück einer Baumstruktur abzufragen. Ich bin nicht sicher, wie Google App Engine funktionieren würde, wenn diese Indizes zu aktualisieren, jedoch.

Wenn es um die Google App Engine kommt, Ihr Hauptanliegen sollte die Anzahl der Abfragen zu reduzieren, um Sie machen müssen, und dass Ihre Abfragen so wenig Zeilen wie möglich zurück. Operationen sind teuer, aber Speicher ist nicht, so Redundanz soll nicht als eine schlechte Sache gesehen werden.

Hier sind einige Gedanken zu dem Thema, das ich durch googeln gefunden (obwohl für MySQL, aber Sie können die allgemeine Vorstellung von ihm erhalten): Verwalten von Hierarchical Data in MySQL

Ah und hier ist eine Diskussion für Google App Engine: Modellierung Hierarchical Data

Eine Möglichkeit ist das Modell des übergeordneten Attribut zu verwenden. Anschließend können Sie den Einsatz von query.ancestor machen () und model.parent () Funktionen.

Ich denke, es hängt davon ab, welche Art von Operationen möchten Sie auf diese Daten tun, was am besten würde bestimmen, wie sie zu vertreten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top