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

MongoDB:Dovresti comunque fornire ID che collegano ad altre raccolte o includere semplicemente raccolte?

Dipende.

Dipende da quanti di ciascuno di questi tipi di oggetti ti aspetti di avere. Puoi inserirli tutti in un unico documento MongoDB per un determinato argomento? Probabilmente no.

Dipende dalle relazioni:hai relazioni uno-a-molti o molti-a-molti? Se è uno a molti e il numero di entità correlate è piccolo, potresti scegliere di incorporarle in un IList in un documento. Se è molti-a-molti, potresti scegliere di utilizzare una relazione più tradizionale o potresti scegliere di incorporare entrambe le parti come IListi.

Puoi ancora modellare le relazioni in MongoDB con raccolte separate MA non ci sono join nel database, quindi devi farlo nel codice. Caricare un argomento e quindi caricare i commenti per esso potrebbe andare bene dal punto di vista delle prestazioni.

Altri suggerimenti:

Con MongoDB puoi indicizzare gli array INTO sui documenti. Quindi non pensare a un indice solo come a un indice su un semplice campo su un documento (come SQL). Puoi usare, ad esempio, una raccolta di tag su un argomento e indicizzarla nei tag. (Vedi http://www.mongodb.org/display/DOCS/Indexes #Indici-Array )

Quando recuperi o scrivi dati puoi eseguire una lettura parziale e una scrittura parziale di qualsiasi documento. (vedi http://www.mongodb.org/display /DOCS/Recupero+un+sottoinsieme+di+campi )

E, infine, quando non riesci a vedere come ottenere ciò che desideri utilizzando raccolte e indici, potresti essere in grado di ottenerlo utilizzando map reduce. Ad esempio, per trovare tutti i tag attualmente in uso ordinati in base alla loro frequenza di utilizzo, mappare ciascun argomento che emette i tag utilizzati in esso, quindi ridurre tale set per ottenere il risultato desiderato. Potresti quindi memorizzare il risultato di tale riduzione della mappa in modo permanente e aggiornarlo solo quando necessario.

È un cambiamento mentale abbastanza significativo rispetto al pensiero relazionale, ma ne vale la pena se hai bisogno della scalabilità e della flessibilità offerte da un approccio NOSQL.