Google Datastore e record profondi

1

Sono all'inizio della creazione di un sito Web che utilizza Google Datastore per archiviare le informazioni relative ai clienti e sono curioso di sapere se il record è troppo profondo per NoSQL o se sto bene.

Essenzialmente memorizzerò i dettagli dei clienti in un'azienda di fitness che è abbastanza dettagliata.

Un esempio di record completamente composto potrebbe essere

{
  firstName : "Jon",
  lastName : "Doe",
  assessment : [
    {
      date: "2013-01-31",
      flexibility:
        {
          leftShoulder: "12 whatevers",
          rightShoulder: "15 somethings",
          ...etc...
        }
      strength:
        {
          legPress: "100lb",
          shoulderPress: "22lb",
          ...etc...
        }
      ...etc...
    },
    {
      date: "2013-02-28",
      flexibility:
        {
          leftShoulder: "13 whatevers",
          rightShoulder: "14 somethings",
          ...etc...
        }
      strength:
        {
          legPress: "110lb",
          shoulderPress: "25lb",
          ...etc...
        }
      ...etc...
    }
  ],
  appearance: [
    {
      date: "2013-04-12",
      image: "http://blah"
    }
    ...etc...
  ]
  ...lots of other sub items...
}

Questo record esisterebbe a lungo termine per i clienti e potrebbe diventare un record molto grande nel tempo. Ho visto su MongoDB, che è anche NoSQL, ha un limite di 16 MB su un record. Mentre questo è un grande spazio per il testo ed è pieno di grandi record, voglio assicurarmi che questo non indichi che dovrei separarli per quanto riguarda NoSQL.

Invece, dovrei separare i record assessment e appearance nei propri record separati, collegati da una chiave esterna di qualche tipo o ciò vanifica lo scopo di NoSQL?

Qual è la migliore pratica per la progettazione di record NoSQL profondi a lungo termine.

    
posta Kirk 01.06.2013 - 00:08
fonte

1 risposta

2

Diversamente da MongoDB, Datastore non è basato su JSON. Non memorizza matrici o dizionari. AGGIORNAMENTO: A partire dal 2016, può archiviare array e dizionari.

È possibile creare una determinata gerarchia di entità, ma limita principalmente il loro contesto di transazione e fornisce loro collegamenti genitoriali impliciti. Sebbene consenta di recuperare un'entità superiore (record) e tutte le entità che la elencano come genitore, non fornisce una cancellazione a cascata (a meno che non sia espressamente specificato ).

Quello che consiglierei è un'entità di primo livello, un'entità per valutazione e un'entità per aspetto.

Se vuoi recuperare tutte le (o più) entità di valutazione, usa una query predecessore. Ricorda però che le letture sono pagate in AppEngine e dovresti stare attento al numero di entità che hai letto (o scritto), altrimenti esaurirai rapidamente la quota gratuita.

    
risposta data 16.06.2013 - 08:51
fonte