Je pense créer une application multi-locataire à l'aide de MongoDB. Je n'ai aucune estimation du nombre de locataires que j'aurais encore, mais j'aimerais pouvoir passer à des milliers.
Je peux penser à trois stratégies:
- Tous les locataires de la même collection, en utilisant des champs spécifiques aux locataires pour la sécurité
- 1 collection par locataire dans une seule base de données partagée
- 1 base de données par locataire
La voix dans ma tête me suggère de choisir l'option 2.
Pensées et implications, quelqu'un?
mongodb
multi-tenant
Braintapper
la source
la source
Réponses:
J'ai le même problème à résoudre et je considère également des variantes. Comme j'ai des années d'expérience dans la création d'applications SaaS multi-locataires, j'allais également sélectionner la deuxième option en fonction de mon expérience précédente avec les bases de données relationnelles.
En faisant mes recherches, j'ai trouvé cet article sur le site de support de mongodb (il y a eu un retour depuis qu'il est parti): https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Les gars ont déclaré éviter à tout prix les 2e options, ce qui, d'après ce que je comprends, n'est pas particulièrement spécifique à mongodb. J'ai l'impression que cela s'applique à la plupart des bases de données NoSQL que j'ai recherchées (CoachDB, Cassandra, CouchBase Server, etc.) en raison des spécificités de la conception de la base de données.
Les collections (ou buckets ou comment ils l'appellent dans différentes bases de données) ne sont pas la même chose que les schémas de sécurité dans le SGBDR bien qu'ils se comportent comme des conteneurs pour des documents, ils sont inutiles pour appliquer une bonne séparation des locataires. Je n'ai pas trouvé de base de données NoSQL pouvant appliquer des restrictions de sécurité basées sur des collections.
Bien sûr, vous pouvez utiliser la sécurité basée sur les rôles mongodb pour restreindre l'accès au niveau de la base de données / serveur. ( http://docs.mongodb.org/manual/core/authorization/ )
Je recommanderais la 1ère option lorsque:
J'irais pour la variante 3 si:
Si vous publiez des détails supplémentaires sur votre candidature, je pourrais peut-être vous donner des conseils plus détaillés.
la source
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, l'option n ° 2 semble être la meilleure voie à suivre.
Citation du commentaire de David Mytton:
la source
Il existe un article raisonnable sur MSDN sur l'architecture de données multi-locataires auquel vous voudrez peut-être vous référer. Quelques sujets clés abordés dans cet article:
Certains modèles de configuration Software as a Service (SaaS) sont également abordés.
De plus, ça vaut le coup d'oeil est un article intéressant des gars de SQL Anywhere .
Ma propre opinion personnelle - à moins que vous ne soyez certain de la sécurité / confiance imposées, j'irais avec l'option 3, ou si les problèmes d'évolutivité interdisent au minimum le retour à l'option 2. Cela dit ... je ne suis pas un pro avec MongoDB. Je deviens assez nerveux en utilisant un "schéma" partagé - mais je m'en remettrai volontiers à des pratiquants plus expérimentés.
la source
J'irais pour l'option 2.
Cependant, vous pouvez définir l'option de ligne de commande mongod.exe --smallfiles. Cela signifie que la plus grande taille de fichier d'une extension sera de 0,5 gigaoctet et non de 2 gigaoctets. J'ai testé cela avec mongo 1.42. L'option 3 n'est donc pas impossible.
la source
D'après mes recherches dans MongoDB. Trucos y consejos. Aplicaciones multitenant. cette option n'est pas recommandée si vous ne savez pas combien de locataires vous pouvez avoir, cela pourrait être des milliers et ce serait compliqué quand il s'agit de sharding, imaginez aussi avoir des milliers de collections dans une seule base de données ... Donc dans votre cas ça 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 comme vous le pensiez.
la source
Bien que la discussion ici porte sur NoSQL et principalement MongoDB, chez Citus , nous utilisons PostgreSQL et créons une base de données multi-locataires distribuée / partagée.
Notre guide de cas d'utilisation parcourt un exemple d'application, couvrant le schéma et diverses fonctionnalités spécifiques à plusieurs locataires.
Pour des données plus non structurées, nous utilisons la colonne JSONB de PostgreSQL pour stocker ces données spécifiques aux locataires.
la source