Ci scusiamo se questa domanda è troppo semplice; Sto solo entrando in nona classe.Relazioni più efficaci uno-a-molti in Google App Engine Datastore?
Sto cercando di conoscere la progettazione del database NoSQL. Voglio progettare un modello di Google Datastore che riduca al minimo il numero di operazioni di lettura/scrittura.
Ecco un esempio di giocattolo per un post di blog e commenti in una relazione uno-a-molti. Che è più efficiente: memorizzando tutti i commenti in StructuredProperty o utilizzando KeyProperty nel modello Comment?
Anche in questo caso, l'obiettivo è ridurre al minimo il numero di operazioni di lettura/scrittura sul datastore. È possibile formulare le seguenti ipotesi:
- I commenti non verranno recuperati indipendentemente dal rispettivo post sul blog. (Ho il sospetto che questo rende lo StructuredProperty più preferibile.)
- commenti dovranno essere ordinabili per data, voto, autore, ecc (sottoproprietà nel datastore non possono essere indicizzati, quindi forse questo potrebbe influire sulle prestazioni?)
- Sia i post del blog che i commenti possono essere modificati (o anche cancellati) dopo la loro creazione.
Uso 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...
Uso 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...
Sentitevi liberi di portare eventuali altre considerazioni relative a rappresentare efficacemente una relazione uno-a-molti per quanto riguarda la minimizzazione il numero di lettura/scrittura sul datastore.
Grazie.
Considerare come risolvere il problema della dimensione totale dei commenti e del blogpost superiore a 1 MB. Può mai succedere? Se potesse e non avessi una buona soluzione per affrontarlo, sembrerebbe dal punto di vista della pura funzionalità che non ti preoccuperai nemmeno di una singola entità che contiene entrambi. –
Un'alternativa potrebbe essere quella di archiviare tutte le chiavi dei commenti nel post del blog. Quindi è possibile recuperare tutti i commenti con un singolo ndb.get_multi (chiavi), ma consentirebbe un numero significativamente maggiore di commenti e, se si supera ancora 1 MB, sarà possibile trasferire i commenti singolarmente. –