多租户(SAAS)使用nodejs集合

我正在尝试使用nodejs和postgres构build一个多租户(/ Software as a service),并将其作为ORMinheritance。 由于安全原因,我决定为每个客户端使用单独的数据库,而不是单个数据库,而所有表都有额外的列。 我取得了这个结果,但是性能并不好,因为我必须根据每个数据库(几乎每个请求)初始化每个数据库的模型。 有没有更好的方法来做到这一点? 我在遗漏了什么东西吗?

我更喜欢Postgres中的多租户模式方法。 我不是安全的权威,但应该比基于表格的多租户更好。 灾难恢复也应该比基于表的MT稍微容易一些,但是仍然比单独的数据库差。

我设法使用ES6代理来实现Sequilize。 这对你的Node版本提出了一个很难的要求,但是如果你愿意使用至lessv6.9.2,你可以试试我的lib:

https://www.npmjs.com/package/sequelize-multi-tenant-enhancer

上面我的评论的快速实施。

app.js:

const Sequelize = require('sequelize'); const connections = { client1: new Sequelize('postgres://user:pass@example.com:5432/client1'), client2: new Sequelize('postgres://user:pass@example.com:5432/client2'), client3: new Sequelize('postgres://user:pass@example.com:5432/client3'), }; const User = require('./models/user'); const Post = require('./models/post'); const Comment = require('./models/comment'); Object.keys(connections).forEach(connection => { connection.define('User', userColumns); connection.define('Post', postColumns); connection.define('Comment', commentColumns); }); 

车型/ user.js的:

 module.exports = { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, username: Sequelize.STRING, email: Sequelize.STRING // etc, etc }; 

很显然,无论你使用哪个服务器框架,你都需要检测(从我想象中的URL)哪个客户端连接用于给定的请求。

或者,考虑编写一个单连接的应用程序,并部署它的多个实例(我目前正在这样做)。 可能是一个更简单的select,如果你设置在单独的数据库。