我正尝试使用nodejs和postgres构建多租户(/软件作为服务),将其作为ORM续集。由于安全原因,我决定为每个客户端使用单独的数据库,而不是单个数据库,而所有表都具有额外的列。我达到了结果,但性能并不好,因为我必须根据每个数据库的初始化模型(几乎每个请求)。有没有更好的方法来做到这一点?我在续集中错过了什么吗?使用nodejs的多租户(SAAS)sequelize
1
A
回答
1
我更喜欢Postgres中的多租户模式方法。我在安全方面没有权威,但它应该比基于表格的多租户更好。灾难恢复应该比基于表格的MT稍微容易一些,但仍然比单独的数据库差。
我设法使用ES6代理在Sequilize中实现这一点。这使你的节点版本硬需求量的,但如果你愿意使用至少v6.9.2,你可以给我的lib一试:
https://www.npmjs.com/package/sequelize-multi-tenant-enhancer
1
快速实施我上面的评论。
app.js:
const Sequelize = require('sequelize');
const connections = {
client1: new Sequelize('postgres://user:[email protected]:5432/client1'),
client2: new Sequelize('postgres://user:[email protected]:5432/client2'),
client3: new Sequelize('postgres://user:[email protected]: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我想象)的客户端连接用于给定的请求。
或者,考虑编写一个单连接的应用程序并部署它的多个实例(我目前正在这样做)。如果你设置在不同的数据库上,可能会是一个更简单的选择。
相关问题
- 1. 使用.NET和IIS的多租户SaaS
- 2. Django中的多租户SAAS
- 3. 开发多租户SaaS
- 4. 多租户Saas建于yii2
- 5. windows Azure多租户与单租户的SaaS应用
- 6. SaaS多租户应用程序Jumpstart
- 7. 多租户SaaS参考应用
- 8. J2EE多租户SaaS应用程序
- 9. 多租户Web/SaaS应用程序
- 10. 制作Tomcat多租户用于SaaS
- 11. Yii2中内置的多租户SaaS
- 12. 多租户SaaS的哪个框架
- 13. Symfony2中的SAAS和多租户?
- 14. 最适合多租户/多模板SAAS应用的Web框架
- 15. 针对SAAS的多租户客户特定定制
- 16. 多租户SaaS应用程序的最佳方法
- 17. Azure上的多租户(SaaS)Web应用程序,部署选项
- 18. 多租户SAAS应用程序的数据库设计和ORM
- 19. 确保多租户SaaS应用程序的安全
- 20. 多租户SaaS应用程序的数据库架构
- 21. Mongo DB - 每个客户端真的推荐多租户SAAS使用1个DB?
- 22. Java适用于多租户SAAS架构吗?
- 23. 如何保持MongoDB多租户PHP SaaS应用方案
- 24. 确保SPA多租户SaaS应用程序
- 25. 在SaaS多租户RESTful应用程序中暴露ID
- 26. 使用的NodeJS JOIN对sequelize
- 27. Django多用户saas
- 28. SAAS REST API身份验证中的多租户
- 29. 使用单个或多个mysql用户用于多租户架构的SaaS PHP/mysql应用程序
- 30. 多租户,每个租户
与单个数据库使用池(Postgres的),你将有更好的可扩展性和更少的头痛 – Sushant
也许发布一些代码? FWIW,你只需要初始化你的模型一次(你肯定不需要在每个请求中重新定义它们)。如果您愿意,您可以保留单独的数据库 - 只需使用相关连接详细信息为每个数据库创建一个sequelize实例,并在应用程序启动时将模型定义传递给每个数据库。 –