A mio parere, il formato dei tuoi dati dovrebbe essere la preoccupazione principale nella scelta di un back-end di archiviazione. Disponi di dati di natura relazionale? In tal caso, è possibile ed è una buona idea modellare i dati nei documenti? La modellazione dei dati è importante in un database di documenti quanto in un database relazionale, ma è stata eseguita in modo diverso. Quanti tipi di oggetti hai e come sono correlati? DBrefs in Mongodb può fare il trucco o ti mancheranno le chiavi esterne così tanto che sarà doloroso? Quali sono i tuoi modelli di accesso ai dati? Stai solo recuperando dati di un tipo filtrati da un valore di campo o hai modalità di recupero complesse?
Hai bisogno dell'integrità transazionale ACID? Il dominio impone molti vincoli ai dati? Hai bisogno del fattore di scalabilità di un database di documenti o è solo una cosa "cool" da avere?
Quali sono i tuoi requisiti di coerenza e integrità dei dati? Alcune soluzioni NoSQL e MongoDB in particolare sono piuttosto deboli nella coerenza della scrittura per ottenere prestazioni. NoSQL non è un panorama uniforme e altri prodotti, ad es. CouchDB ha altre caratteristiche in questo reparto. Alcuni sono anche sintonizzabili.
Queste sono tutte domande che dovrebbero entrare nella scelta dello storage.
Alcune esperienze
- La creazione di report estesi sui dati archiviati può essere più difficile quando si utilizza MongoDB o qualsiasi database di documenti e alcuni casi d'uso hanno combinato RDBMS e document-db a tale scopo.
- (Molto) Modello di query diverso. MongoDB differisce anche da altri document-dbs.
- Flessibile per modificare il formato/schema dei dati durante lo sviluppo
- Territorio sconosciuto
- grado di maturità variabile nei driver e nei framework
- Veloce
- Strumenti di gestione e di prodotto (in molti modi) più semplici (rispetto a molti prodotti RDBMS)
- Niente più discrepanza di impedenza. L'archiviazione si adatta ai dati, non il contrario.
- Meno attrito e accesso più diretto ai dati.
- Dominio più legato alla persistenza (dipende dal "livello" ORM di NoRM, da quanto astrae il backend. Non ho usato NoRM quindi non posso rispondere.)