2011-01-05 4 views
5

Sono abbastanza nuovo per MongoDB e NoSQL in generale. Ho una raccolta tematica, in cui ogni argomento può contenere molti commenti. Ogni commento avrà metadati e cosa non renderà utile una raccolta di commenti.MongoDB: dovresti ancora fornire gli ID che collegano ad altre collezioni o includere solo raccolte?

In MySQL userei le chiavi esterne per collegarmi alla tabella dei commenti, ma in NoSQL dovrei semplicemente includere la raccolta di commenti all'interno della raccolta di argomenti o averla in una raccolta e un collegamento separati per id?

Grazie! Matt

+0

possibile duplicato di [relazioni MongoDB per oggetti] (http://stackoverflow.com/questions/4253496/mongodb-relationships-for-objects) –

risposta

8

Dipende.

Dipende dal numero di ciascuno di questi tipi di oggetti che ci si aspetta di avere. Puoi inserirli tutti in un singolo documento MongoDB per un determinato argomento? Probabilmente no.

Dipende dalle relazioni: avete rapporti uno a molti o molti a molti? Se è uno-a-molti e il numero di entità correlate è piccolo, potresti scegliere di inserirli in un IList su un documento. Se è molti-a-molti potresti scegliere di usare una relazione più tradizionale o potresti scegliere di incorporare entrambi i lati come ILists.

È ancora possibile modellare le relazioni in MongoDB con raccolte separate MA non ci sono join nel database, quindi è necessario farlo nel codice. Caricamento di un argomento e quindi il caricamento dei commenti per esso potrebbe andare bene dal punto di vista delle prestazioni.

Altri suggerimenti:

Con MongoDB è possibile indicizzare in array sui documenti. Quindi non pensare a un indice semplicemente come un indice su un campo semplice su un documento (come SQL). Puoi utilizzare, ad esempio, una raccolta di tag su un argomento e un indice nei tag. (Vedi http://www.mongodb.org/display/DOCS/Indexes#Indexes-Arrays)

Quando si recuperano o si scrivono dati, è possibile eseguire una lettura parziale e una scrittura parziale di qualsiasi documento. (vedi http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields)

E, infine, quando non è possibile vedere come ottenere ciò che si desidera utilizzando le raccolte e gli indici, è possibile ottenerlo utilizzando la riduzione della mappa. Ad esempio, per trovare tutti i tag attualmente in uso ordinati in base alla loro frequenza di utilizzo, devi mappare ciascun argomento che emette i tag utilizzati in esso e quindi ridurrai tale set per ottenere il risultato desiderato. È quindi possibile memorizzare il risultato di tale mappa ridurre in modo permanente e solo aggiornare la data quando è necessario.

È un cambiamento di mente abbastanza significativo dal pensiero relazionale, ma ne vale la pena se avete bisogno della scalabilità e della flessibilità che un approccio NOSQL comporta.

2

Guardare anche i documenti di Schema Design (http://www.mongodb.org/display/DOCS/Schema+Design). Ci sono anche alcuni video/diapositive di diverse presentazioni 10Gen sul design dello schema collegate sul sito Mongo. Vedere http://www.mongodb.org/pages/viewpage.action?pageId=17137769 per una panoramica.