Pianificazione di database complessi di Mongo (e possibilmente di altri NoSQL)

0

Non esiste una "strada giusta" per fare qualsiasi cosa, ma ci sono modi "migliori" e "peggiori", oltre a modi veri e testati.

Sto studiando Mongo e lo sto considerando per un progetto. Comincerà in piccolo ma probabilmente crescerà molto.

Ora capisco che ci sono diversi modi per organizzare le informazioni in MongoDB. Dal momento che non ci sono join, inserisco id (o array) e faccio più query per ottenere un oggetto correlato (cioè una persona per un'azienda, un ID aziendale su un oggetto di persone o un array di persone nella tabella della società) o inserisco oggetti direttamente all'interno ... (Cioè, le persone come oggetti in un array all'interno dell'azienda, invece di essere "disaccoppiati").

Ora, il mio problema è: cosa succede se ho bisogno di cambiare il modo in cui caricare queste informazioni?

Un buon esempio, prendendo l'idea degli utenti, è se voglio ottenere tutte le persone (di tutte le società) inattive per l'ultimo mese. Ora, dovrei cercare separatamente in una società alla volta per interrogare queste informazioni? Dovrei tenerli separati e usare id come riferimento in questo caso ...?

Quali sono i compromessi, gli impatti sulle prestazioni e quale approccio è considerato "più appropriato" dalla comunità?

    
posta Fernando Cordeiro 19.03.2015 - 07:10
fonte

1 risposta

1

Come notato da John F. Miller su un'altra domanda su SO ( link ), MongoDB è ottimo per i dati di annidamento, ma non così utile per cercare questi dati annidati.

Un'altra grande risorsa su questa materia viene dalla stessa risposta: link

Fondamentalmente, si rinuncia al controllo quando si lavora con "documenti nei documenti". Un sacco di controllo.

Detto questo, l'approccio suggerito è quello di inserire un documento solo all'interno di un altro se il "documento interno" è assolutamente dipendente da quello esterno. Quindi, e solo dopo, puoi "saltare raccolte".

Puoi, tuttavia, inserire oggetti che fanno riferimento ad altre raccolte, utilizzando tecniche di denormalizzazione per ottenere miglioramenti delle prestazioni.

Che cosa scegliere dipende da ciascun progetto, ma per i dati che devono essere interrogati e utilizzati in diverse situazioni, la soluzione migliore è disporre di raccolte separate e fare riferimento per ID o demineralizzare per un accesso più rapido.

    
risposta data 31.03.2015 - 04:10
fonte