Je recherche un bon moyen d'implémenter plusieurs bases de données pour le support multi-locataires en utilisant node.js + mongoose et mongodb.Mongoose créer une connexion pour le support multi-tenancy dans node.js
J'ai découvert que mongoose supporte une méthode appelée createConnection()
et je me demande quelle est la meilleure pratique pour l'utiliser. En fait, je stocke toutes ces connexions dans un tableau, séparées par le locataire. Ce serait comme:
var connections = [
{ tenant: 'TenantA', connection: mongoose.createConnection('tenant-a') },
{ tenant: 'TenantB', connection: mongoose.createConnection('tenant-b') }
];
Disons que l'utilisateur envoie le locataire, il sera connecté par les en-têtes de demande, et je reçois dans un middleware très tôt express.
app.use(function (req, res, next) {
req.mongoConnection = connections.find({tenant: req.get('tenant')});
});
La question est, est-il OK pour enregistrer les connexions statique ou un meilleur mouvement serait créer cette connexion chaque fois qu'une demande est faite?
Modifier 09/09/2014 - Plus d'informations sur les exigences logicielles
Au début, nous allons avoir environ 3 locataires, mais notre plan est d'augmenter ce nombre à 40 en un an ou deux. Il y a plus d'opérations de lecture que d'écriture, c'est un gros système de données avec apprentissage automatique. Ce n'est pas un logiciel freemium. Les bases de données sont assez grandes parce que la quantité de données historiques, mais ce n'est pas un problème de déplacer des données très anciennes vers un autre emplacement (nous avons déjà pensé à cela). Nous prévoyons de l'effacer plus tard si nous manquons de ressources disponibles sur notre machine de base de données, nous pourrions également séparer certains locataires dans différentes machines. Ce qui m'intrigue le plus, c'est que certaines personnes disent que ce n'est pas une bonne idée d'avoir des collections préfixées pour le multitenancy, mais les raisons sont très courtes.
https://docs.compose.io/use-cases/multi-tenant.html
http://themongodba.wordpress.com/2014/04/20/building-fast-scalable-multi-tenant-apps-with-mongodb/
Il est coûteux de créer et de détruire des connexions tout le temps - utilisez-vous l'authentification dans la base de données? Ou seulement dans votre application? Chaque locataire est-il dans une instance distincte, "db", séparé "collection" ou ...? c'est-à-dire, comment les connexions diffèrent-elles? –
Hé, merci de répondre. L'authentification se passe au niveau de l'application mais elle vérifie une collection mongo (utilisateurs). L'idée est d'avoir un db pour chaque locataire (après quelques recherches sur le web, les gens disent d'éviter la collecte de préfixes mais ils ne disent pas pourquoi ...). Nous ne savons pas encore comment les locataires différeront les uns des autres, peut-être un peu plus tard, mais j'aimerais que cela soit préparé comme des index différents. –