node.js - 使用 nodejs sequelize 的 Multi-Tenancy (SAAS)

标签 node.js postgresql sequelize.js multi-tenant saas

我正在尝试使用 nodejs 和 postgres 构建一个 Multi-Tenancy (/软件即服务),sequelize 作为 ORM。出于安全原因,我决定为每个客户端使用单独的数据库,而不是让所有表都有额外列的单个数据库。我实现了结果,但性能并不好,因为我必须根据 sequelize(几乎每个请求)为每个数据库初始化模型。有没有更好的方法来做到这一点?我在 sequelize 中遗漏了什么吗?

最佳答案

快速实现我上面的评论。

应用程序.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)哪个客户端连接用于给定请求。

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

关于node.js - 使用 nodejs sequelize 的 Multi-Tenancy (SAAS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304349/

相关文章:

javascript - 如何在 Puppeteer 中迭代 html 标签以获取带有通配符的innerText?

javascript - Node - 将 m3u8 流保存为 mp3 文件

postgresql - plv8 JavaScript 语言扩展能调用第三方库吗?

node.js - 如何在 node.js sequelize 库中测试所有复制服务器的连接

javascript - Node.js 事件中的 on() 和 addListener() 有什么区别?

postgresql - 使用grails和GROM将csv文件导入数据库中

java - 更新 SQL 查询在 Java Swing 中不起作用

javascript - 在 Node.js 中处理回滚的 MySQL 事务

orm - 无法使用 sequelize cli 创建 ENUM 类型属性

node.js - 使用 Redis Pub/Sub 的 Socket IO 服务器集群