Qu'est-ce que l'approche recommandée vers le multi-locataire de bases de données dans MongoDB?
Je pense à la création d'un multi-locataire de l'app à l'aide de MongoDB. Je n'ai pas de suppositions en termes de nombre de locataires j'aurais encore, mais je voudrais être en mesure à l'échelle de plusieurs milliers de personnes.
Je pense, de trois stratégies:
- Tous les locataires dans la même collection, à l'aide de locataire champs spécifiques pour la sécurité
- 1 Collecte par le locataire dans une seule et même DB
- 1 Base de données par le locataire
La voix dans ma tête ce qui suggère que je pars avec l'option 2.
Pensées et les implications, n'importe qui?
- Cher @Braintapper, nous sommes dans la même situation en ce moment avec notre application qui a besoin d'être multi-location-mesure. Avez-vous des expériences à partager? Ce serait génial, merci.
- Pour mon application, j'ai fini par aller avec Postgresql (nous bénéficions d'une base de données relationnelles avec certains NoSQL comme fonctionnalité via le hstore extension) au lieu de MongoDB et de manutention multi-tenancy dans les Rails avec la portée. Nous utilisons une approche similaire à celle utilisée dans ce Railscast: railscasts.com/episodes/388-multitenancy-with-scopes
- je sais que la réponse a déjà été choisi pour cette question, mais quelqu'un d'autre devrait se référer à ce document officiel sur mongohq site : support.mongohq.com/use-cases/multi-tenant.html . C'est clairement défenseurs contre @Braintapper solution ci-dessous
- Réponse de mise à jour. Les informations dans votre lien n'était pas disponible en Mai 2010.
- utilisez-vous postgresql solution (basé sur railscasts.com dès maintenant ? Je veux l'utiliser, mais je ne suis pas certain que cela apporte de la sécurité et combien de locataire, il peut prendre en charge ! svp j'ai besoin de vos commentaires au sujet de cette expérience. merci
- Oui, nous utilisons notre propre version personnalisée de Postgresql solution. Vous pouvez avoir autant de locataires que vous le souhaitez, il vous suffit de vous assurer que votre conception de base de données est à l'écoute de vos besoins. En termes de sécurité, vous aurez à faire un travail là-bas. Il y a quelques conserves de pierres précieuses et de bibliothèques que vous pouvez trouver pour vous aider à gérer cela.
- merci pour la réponse, je pensais à postgres schéma de séparation, mais il semble qu'il a ses limites, et peut-être que c'est mieux de faire de la "étendues de solution", pouvez-vous me donner une idée du genre de travail que j'ai à faire à l'intérieur de la question de la sécurité ?
- Vous devez vous assurer que vos contrôleurs et les modèles sont en train de faire ce dont ils ont besoin pour ramasser le locataire actuel de l'id pour s'assurer que toutes les requêtes sont filtrés contre le locataire de l'id. Une fois de plus, à l'aide d'une conserve de gem pourrait probablement le faire pour vous. Tout ce que je vous raconte comment j'ai fait c'est probablement le cas.
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème à résoudre et en envisageant des variantes.
Comme j'ai des années d'expérience de la création de SaaS multi-tenant applicatios j'ai aussi allait sélectionnez la deuxième option basée sur mon expérience avec les bases de données relationnelles.
Tout en faisant mes recherches, j'ai trouvé cet article sur mongodb site de support (le chemin du retour ajoutés depuis il a disparu):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi-tenant.html
Le gars a déclaré à éviter 2e options à tout prix, qui, comme je comprends, c'est pas particulièrement spécifique à mongodb. Mon impression est que c'est applicable pour la plupart des NoSQL dbs j'ai fait des recherches (CoachDB, Cassandra, CouchBase Server, etc.) en raison des spécificités de la conception de base de données.
Collections (ou des seaux ou des cependant ils l'appellent dans différents DBs) ne sont pas la même chose que la sécurité des schémas dans les SGBDR malgré qu'ils se comportent comme conteneur pour les documents qu'ils sont inutiles pour l'application de bonnes locataire de la séparation. Je ne pouvais pas trouver de bases de données NoSQL qui peuvent appliquer des restrictions de sécurité basées sur des collections.
Bien sûr, vous pouvez utiliser mongodb en fonction des rôles de sécurité pour limiter l'accès à la base de données au niveau du serveur. (http://docs.mongodb.org/manual/core/authorization/)
Je recommande 1ère option lorsque:
conception, mise en œuvre et l'expérimentation de ce scénario.
la fonctionnalité de la base de données pour les différents locataires.
personnalisations lors de l'exécution.
ressources.
les sauvegardes pour chaque locataire). Il est possible de le faire même dans ce
scénario mais l'effort sera énorme.
J'irais pour la variante 3 si:
Si vous publiez des détails supplémentaires au sujet de votre demande, peut-être que je peux vous donner des conseils plus détaillés.
J'ai trouvé une bonne réponse dans les commentaires de ce lien:
http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/
Fondamentalement option #2 semble être la meilleure façon d'aller.
Citation de David Mytton commentaire:
Il est raisonnable de l'article sur MSDN sur le multi-locataire architecture de données qui pourraient vous désirez consulter. Certains des principaux sujets abordés par le présent article:
Également abordées sont quelques modèles de Logiciels de comme un Service (SaaS) de configuration.
En outre, d'une valeur de gander est une intéressante écriture-up à partir de SQL Anywhere gars.
Mon propre point de vue personnel - sauf si vous êtes certain de la sécurité et de confiance, je voudrais aller avec l'option 3, ou si l'évolutivité des problèmes interdire de secours pour l'option 2 au minimum. Cela dit... je ne suis pas un pro avec MongoDB. Je reçois assez nerveux partagé un "schéma" - mais je serai heureux de reporter à plus de praticiens expérimentés.
Je voudrais aller pour l'option 2.
Cependant, vous pouvez définir mongod.exe option de ligne de commande --smallfiles. Cela signifie que la plus grande taille de fichier d'une mesure sera de 0,5 go et pas de 2 gigaoctets. J'ai testé avec mongo 1.42 . Si l'option 3 n'est pas impossible.
Alors que la discussion est sur le NoSQL et principalement MongoDB, nous, à Citus sont l'utilisation de PostgreSQL et de la construction d'un distribuée/fragmenté multi-locataire de la base de données.
Notre cas d'utilisation guide d' promenades à travers un exemple d'application, couvrant le schéma et les divers multi-locataire de fonctionnalités spécifiques.
Pour plus de données non structurées, nous utilisons PostgreSQL est JSONB colonne de stocker et locataire de données spécifique.
Selon mes recherches dans MongoDB. Trucos y consejos. Telecharger multi.
cette option n'est pas recommandée si vous ne savez pas combien de locataires que vous pouvez avoir, il pourrait être des milliers, et il serait compliqué quand il s'agit de la fragmentation, également imaginer d'avoir des milliers de collections dans une seule base de données ... Donc dans votre cas, il est recommandé d'utiliser la première option. Maintenant, si vous allez avoir un nombre limité d'utilisateurs, c'est déjà différent et oui, vous pouvez utiliser l'option deux que vous le pensiez.