我正在研究一种使用 node.js + mongoose 和 mongodb 实现多数据库以支持多租户的好方法。
我发现 mongoose 支持一种名为createConnection()
我想知道使用它的最佳实践。实际上,我将所有这些连接存储在一个数组中,由租户分隔。它会是这样的:
var connections = [
{ tenant: 'TenantA', connection: mongoose.createConnection('tenant-a') },
{ tenant: 'TenantB', connection: mongoose.createConnection('tenant-b') }
];
假设用户向租户发送他将通过请求标头登录的信息,我在 Express 的一个非常早期的中间件中得到了它。
app.use(function (req, res, next) {
req.mongoConnection = connections.find({tenant: req.get('tenant')});
});
问题是,是否可以静态存储这些连接,或者更好的做法是在每次发出请求时创建该连接?
编辑 2014-09-09 - 有关软件要求的更多信息
起初我们将有大约 3 个租户,但我们的计划是在一两年内将这个数字增加到 40 个。读操作比写操作多,它基本上是一个带有机器学习的大数据系统。它不是免费增值软件。由于历史数据量很大,数据库相当大,但将非常旧的数据移动到另一个位置不是问题(我们已经考虑过这一点)。我们计划稍后将其分片,如果我们的数据库计算机上的可用资源耗尽,我们还可以将一些租户分离到不同的计算机上。
最让我感兴趣的是,有些人说为多租户提供前缀集合不是一个好主意,但其原因很短。
https://docs.compose.io/use-cases/multi-tenant.html https://docs.compose.io/use-cases/multi-tenant.html
http://themongodba.wordpress.com/2014/04/20/building-fast-scalable-multi-tenant-apps-with-mongodb/ http://themongodba.wordpress.com/2014/04/20/building-fast-scalable-multi-tenant-apps-with-mongodb/