MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Best practice NoSQL

Penso che attualmente l'intera idea di archivi dati NoSQL e il concetto di database di documenti sia così nuovo e diverso dalle idee consolidate che guidano l'archiviazione relazionale che attualmente ci sono pochissime (se non nessuna) best practice.

Sappiamo a questo punto che le regole per archiviare i tuoi dati all'interno di CouchDB (o qualsiasi altro database di documenti) sono piuttosto diverse da quelle per uno relazionale. Ad esempio, è praticamente un dato di fatto che la normalizzazione e l'obiettivo di 3NF non sono qualcosa per cui si dovrebbe lottare. Uno degli esempi più comuni potrebbe essere quello di un semplice blog.

In un negozio relazionale, avresti una tabella ciascuno per "Post", "Commenti" e "Autori". Ogni autore avrebbe molti post e ogni post avrebbe molti commenti. Questo è un modello che funziona abbastanza bene e si mappa bene su qualsiasi DB relazionale. Tuttavia, la memorizzazione degli stessi dati all'interno di un docDB sarebbe molto probabilmente piuttosto diversa. Probabilmente avresti qualcosa come una raccolta di documenti Post, ognuno dei quali avrebbe il proprio Autore e una raccolta di Commenti incorporati. Ovviamente probabilmente non è l'unico modo in cui potresti farlo, ed è in qualche modo un compromesso (ora interrogare un singolo post è veloce:fai solo un'operazione e ottieni tutto indietro), ma non hai modo di mantenere la relazione tra autori e post (poiché tutto diventa parte del documento del post).

Anch'io ho visto esempi che utilizzano un attributo "type" (in un esempio CouchDB). Certo, suona come un approccio praticabile. È il migliore? Non ho la più pallida idea. Certamente in MongoDB useresti raccolte separate all'interno di un database, rendendo l'attributo type una totale sciocchezza. In CouchDB però... forse quello è migliore. Le altre alternative? Database separati per ogni tipo di documento? Questo sembra un po 'loop, quindi mi orienterei verso la soluzione "tipo" da solo. Ma sono solo io. Forse c'è di meglio.

Mi rendo conto di aver divagato un bel po' qui e di aver detto molto poco, molto probabilmente niente che tu non sapessi già. Il punto è però questo:penso che spetti a noi sperimentare gli strumenti che abbiamo e i dati con cui stiamo lavorando e nel tempo le buone idee verranno diffuse e diventeranno le migliori pratiche. Penso solo che tu lo stia chiedendo un po' troppo all'inizio del gioco.