Ich versuche, eine grundlegende lineare kommentieren für mein Blog in App Engine zu modellieren (Sie können es bei http://codeinsider.us sehen). Meine Hauptklassen von Objekten sind:Was sind gute Beispiele für App Engine NDB-Kommentarmodelle?
Benutzer, Artikel, Kommentare
Ein Benutzer viele Kommentare haben und sollten auf einen Blick ihre Kommentare betrachten können.
Ein Artikel werden viele Kommentare und sollten auf einen Blick sichtbar.
Ein Kommentar wird mit genau einem Benutzer und genau ein Artikel zugeordnet wird.
Ich weiß, wie ich dies in einer relationalen Standarddatenbank erstellen könnte - ich könnte sagen, Tabellen für Kommentare, Benutzer und Artikel, mit Fremdschlüsseln, um sie zusammen, Eindeutigkeit Einschränkungen für Artikel und Benutzer, und keine auf Kommentare usw. Nichts Besonderes.
Was ist die beste Möglichkeit, dies in Python App Engine mit NDB zu modellieren? ndb.KeyProperty scheint ebenso interessant zu sein wie StructuredProperty. Ich glaube jedoch nicht, dass ich StructuredProperty verwenden kann, da ein Kommentar sowohl einem Benutzer als auch einem Artikel "gehören" kann. Aber mit ndb.KeyProperty scheint es, wie die keyProperty keine Kontrolle oder Validierungslogik machen, so würde ich das auf meinem eigenen implementieren.
Die andere Sache, die ich tun kann, ist nur in das Handtuch werfen und speichern riesige JSON-Blobs in Benutzer und Artikel, die die Schlüssel und Arten von Kommentaren darstellen. Das ist vielleicht keine schlechte Lösung.
Irgendwelche Gedanken?
Edit: Dies wird hoch lesen, niedrig schreiben. Ich mag Kommentare zu Kommentaren hinzufügen (upvotes/downvotes), aber selbst dann wird es stark auf Lesevorgänge gewichtet.
Danke! Die Verwendung der Vorgängerfunktion ist also sinnvoll für Artikel -> Kommentare, aber muss ich nicht immer noch weitere Leseabfragen durchführen, wenn ein Benutzer alle seine Kommentare anzeigen möchte? – mallyvai
Auch, wenn ich das richtig verstehe, würden die Kommentare eines einzelnen Artikels nicht "N" lesen? Die Lösung, die ich gerade ausprobiere, ist eine Art Denormalisierung - jeder Artikel hat eine Liste mit Strukturierten Eigenschaften von Kommentaren, und ein Benutzer hat die gleiche Liste mit Strukturierten Eigenschaften von Kommentaren (tatsächliche Kommentare, keine Referenzen). Ich verwende eine gruppenübergreifende Transaktion, um das Update auf die richtige Art und Weise durchzuführen. Der Kompromiss hier scheint zu sein, dass zu viel paralleles Schreiben zu Bombenanschlägen führen wird, aber das ist okay für die Zeit ... – mallyvai