seule base de données MongoDB vs collection par client vs base de données par client
Question
Je veux construire un webservice en utilisant MongoDB et de lithium. Qu'est-ce qui est mieux:
-
stocker les données de tous les clients dans une collection (par exemple tous les documents de transactions de clients multiples dans une transaction de collecte)
-
Créer plusieurs collections par exemple transactions_client1, transactions_client2 etc.
-
Un db par client
le système doit être évolutif et doit être facile à déployer
La solution
Pour donner une orientation, il faudrait en savoir beaucoup plus sur ce que vous voulez atteindre, exactement.
Cependant, je voudrais exclure l'option 2 (plusieurs collections) parce que je ne vois pas vraiment d'avantages de cette approche: vous devez déterminer le nom de la collection à l'exécution, il est un peu plus difficile à écrire vos questions et il y a une limite stricte du nombre de collections que vous pouvez avoir (environ 1,5 million de collections avec 2 Go fichier d'espace de noms )
Option 1 peut aider à isoler les clients et pourrait améliorer la sécurité, mais il y a toujours le risque d'erreurs de programmation dans le choix de la base de données. Isoler ce code est facile, cependant.
Ces deux options ont l'inconvénient que vous ne pouvez pas interroger dans toutes les collections. Cependant, vous voulez toujours avoir accès à certaines collections qui sont essentiellement partagées entre tous les clients (par exemple les journaux, statistiques, etc.) de sorte que vous avez la charge de séparation supplémentaire ceux-ci.
C'est pourquoi je habituellement aller pour l'option 1.
Autres conseils
Je vous suggère de commencer par une db et une collection. Il gérer une base de données en général plus simple. Dans l'avenir, si vous avez besoin de créer la base de données séparée (pour speedup certains clients), vous pouvez les données de vidage de ce client et de le mettre au serveur de base de données séparée (ou tout simplement dans la collecte séparée). Il suffit de prendre cette fonction dans l'esprit quand vous l'architecture conception de votre application. Donc, mon avis est 1 . D'un autre point de vue, vous pouvez l'échelle avec une collection via sharding et la réplication.
le système doit être évolutif et doit être facile à déployer
Votre base de données sera juste évolutive parce que vous utilisez MongoDB, qui a été conçu à l'échelle. Et vous pouvez facilement déployer la base de données, car il est sans schéma. En général, vous devrez peut-être simple copier des données d'un serveur à un autre. Il y a des façons de le faire beaucoup à: copie collection , les données , copie base de données .