MongoDB singolo database vs raccolta per cliente vs banca dati per cliente
Domanda
Voglio costruire un webservice usando MongoDB e litio. Che cosa è meglio:
-
Conservare i dati di tutti i clienti in una raccolta (ad esempio tutti i documenti di transazione di più client nelle operazioni di raccolta uno)
-
Crea più raccolte per esempio transactions_client1, transactions_client2 etc.
-
Una db per cliente
Il sistema deve essere scalabile e deve essere facile da implementare
Soluzione
Per fornire la direzione, si dovrebbe sapere molto di più su ciò che si vuole raggiungere, esattamente.
Tuttavia, mi piacerebbe escludere l'opzione 2 (più raccolte) perché io non vedo alcun vantaggio di questo approccio: si dovrà determinare il nome di raccolta in fase di esecuzione, è un po 'più difficile da scrivere le vostre domande e c'è un limite rigido al numero di collezioni che si possono avere (circa 1,5 milioni di collezioni con 2GB file namespace )
L'opzione 1 può aiutare i clienti a isolare e potrebbe migliorare la sicurezza, ma c'è ancora il rischio di errori di programmazione nella scelta del database. L'isolamento che il codice è facile, però.
Entrambe queste opzioni hanno l'aspetto negativo che non si può interrogare su tutte le collezioni. Tuttavia, si potrà sempre avere accesso ad alcune collezioni che sono sostanzialmente condivise tra tutti i clienti (ad esempio registri, statistiche, ecc) in modo da avere l'onere aggiuntivo di separare questi.
Questo è il motivo che avevo di solito andare per l'opzione 1.
Altri suggerimenti
Vi suggerisco di iniziare da un db e una raccolta. Di solito più semplice gestire un database. In futuro, se avrete bisogno di creare database separato (per velocizzare qualche cliente) è possibile dati di dettaglio di questo client e metterlo al server di database separato (o solo in raccolta differenziata). Basta prendere questa funzione in mente quando si sarà progettare l'architettura della vostra applicazione. Quindi, la mia opinione è 1 . Da un altro punto di vista è possibile scalare con una raccolta tramite sharding e la replica.
Il sistema deve essere scalabile e deve essere facile da implementare
Il database sarà solo scalabile perché si sta utilizzando MongoDB, che è stato progettato in scala. E si può facilmente distribuire database perché è schemaless. In generale, potrebbe essere necessario semplice copia dei dati da un server a un altro. Ci sono un sacco di modi per farlo: Copia raccolta , dati import / export , copia del database .