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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top