Sorry, wenn diese Frage zu einfach ist; Ich gehe erst in die 9. Klasse.Effiziente Eins-zu-viele-Beziehungen im Google App Engine-Datenspeicher?
Ich versuche, über NoSQL-Datenbank-Design zu lernen. Ich möchte ein Google Datastore-Modell entwerfen, das die Anzahl der Lese-/Schreibvorgänge minimiert.
Hier ist ein Spielzeugbeispiel für einen Blogpost und Kommentare in einer Eins-zu-viele-Beziehung. Was ist effizienter - alle Kommentare in einer StructuredProperty speichern oder eine KeyProperty im Comment-Modell verwenden?
Das Ziel besteht wiederum darin, die Anzahl der Lese-/Schreibvorgänge im Datenspeicher zu minimieren. Sie können folgende Annahmen treffen:
- Kommentare werden nicht unabhängig von ihrem jeweiligen Blogpost abgerufen. (Ich vermute, dass dies macht den StructuredProperty am meisten bevorzugt.)
- Kommentare benötigen nach Datum sortierbar sein, Bewertung, Autor usw. (Subproperties im Datenspeicher können nicht indiziert werden, so vielleicht könnte dies die Leistung beeinträchtigen?)
- Sowohl Blogposts als auch Kommentare können nach ihrer Erstellung bearbeitet (oder sogar gelöscht) werden.
Mit StructuredProperty:
from google.appengine.ext import ndb
class Comment(ndb.Model):
various properties...
class BlogPost(ndb.Model):
comments = ndb.StructuredProperty(Comment, repeated=True)
various other properties...
Mit KeyProperty:
from google.appengine.ext import ndb
class BlogPost(ndb.Model):
various properties...
class Comment(ndb.Model):
blogPost = ndb.KeyProperty(kind=BlogPost)
various other properties...
Fühlen Sie sich frei weitere Überlegungen zu bringen, die effizient beziehen sich auf die eine Eins-zu-viele-Beziehung in Bezug auf die Minimierung die Anzahl der Lese-/Schreibvorgänge im Datenspeicher.
Danke.
Überlegen Sie, wie Sie das Problem der Gesamtgröße von Kommentaren und Blogpost größer als 1 MB lösen würden. Kann es jemals passieren? Wenn es möglich ist und Sie keine gute Lösung dafür haben, dann scheint es aus rein funktionaler Sicht, dass Sie sich nicht einmal mit einer einzelnen Entität befassen würden, die beides enthält. –
Eine Alternative könnte sein, einfach alle Schlüssel der Kommentare im Blogpost zu speichern. Dann können Sie alle Kommentare mit einem einzelnen ndb.get_multi (Schlüssel) abrufen, aber würden wesentlich mehr Kommentare erlauben, und wenn Sie immer noch über 1MB gehen, dann können Sie einzelne Kommentare abrufen –