J'envisage de créer une application multi-tenant en utilisant MongoDB. Je ne sais pas encore combien de locataires j'aurai, mais j'aimerais pouvoir m'étendre à des milliers de personnes.
Je peux penser à trois stratégies :
- Tous les locataires dans la même collection, en utilisant des champs spécifiques aux locataires pour la sécurité.
- 1 Collection par locataire dans une seule BD partagée
- 1 base de données par locataire
La voix dans ma tête me suggère de choisir l'option 2.
Réflexions et implications, quelqu'un ?
0 votes
Cher @Braintapper, nous sommes actuellement dans la même situation avec notre application qui doit être multi-tenant. Avez-vous des expériences à partager ? Ce serait formidable, merci.
3 votes
Pour mon application, j'ai fini par choisir Postgresql (nous bénéficions d'une base de données relationnelle avec des fonctionnalités de type NoSQL via l'extension hstore) au lieu de MongoDB et de gérer la multi-location dans Rails avec le scoping. Nous utilisons une approche similaire à celle utilisée dans ce Railscast : railscasts.com/episodes/388-multitenancy-with-scopes
2 votes
Je sais qu'une réponse a déjà été choisie pour cette question mais toute autre personne devrait se référer à ce document officiel sur le site mongohq : support.mongohq.com/use-cases/multi-tenant.html . Il se prononce clairement contre la solution de @Braintapper ci-dessous
1 votes
Réponse mise à jour. Les informations contenues dans votre lien n'étaient pas facilement disponibles en mai 2010.
0 votes
@Braintapper utilisez-vous la solution postgresql (basée sur railscasts.com) en ce moment ? Je veux l'utiliser mais je ne suis pas sûr qu'elle ajoute de la sécurité et combien de locataires elle peut supporter ! s'il vous plaît j'ai besoin de votre retour sur cette expérience. merci
0 votes
@medBo Oui, nous utilisons notre propre version personnalisée de la solution Postgresql. Vous pouvez avoir autant de locataires que vous le souhaitez, vous devez simplement vous assurer que la conception de votre base de données est adaptée à vos besoins. En termes de sécurité, vous devrez faire un peu de travail. Il existe quelques gemmes et bibliothèques en boîte que vous pouvez trouver pour vous aider à gérer cela.
0 votes
@Braintapper merci pour la réponse, je pensais à la séparation des schémas postgres, mais il semble qu'elle ait ses limites, et peut-être est-il préférable de faire la "solution scopes", pouvez-vous me donner une idée du type de travail que je dois faire dans le cadre de la question de la sécurité ?
0 votes
@medBo Vous devez vous assurer que vos contrôleurs et modèles font ce qu'ils doivent faire pour récupérer l'identifiant du locataire actuel afin de garantir que toutes les requêtes sont filtrées en fonction de cet identifiant. Une fois encore, l'utilisation d'une gemme en conserve pourrait probablement le faire pour vous. Tout ce que je vous dirai sur la façon dont je l'ai fait est probablement dépassé.