【问题标题】:Sequelize multiple databases on different serversSequelize 不同服务器上的多个数据库
【发布时间】:2015-05-15 04:39:15
【问题描述】:

我正在为数据库 ORM 使用 Node、Express、Angular 和 Sequelize。到目前为止一切都很好,但我只是需要向 sequelize/node 后端添加一个额外的数据源。

我将如何在 Sequelize 中设置两个不同的数据库(一台服务器上的 db1 和另一台服务器上的 db2)并并排使用它们?
这甚至被支持吗,我需要为此写一些我自己的东西吗?我环顾四周,但找不到任何提及这样做的事情。

提前感谢您的帮助。

【问题讨论】:

  • 当您说两个不同的数据库时,您是指具有不同架构的完全不同的数据库,还是只是相同架构的两个实例(可能被复制?)
  • 我不确定您对 Sequelize 的投入程度,但sails.js ORM 支持跨数据源连接,即使它们是不同的类型(例如,您可以针对 PostgreSQL 连接 MongoDB)或其他什么。
  • 将研究sails.js。谢谢

标签: angularjs node.js express orm sequelize.js


【解决方案1】:

如果架构不同(例如,db1 是您的 User/Groups 数据库,而 db2 是您的 Orders 数据库),您可以只创建两个 Sequelize 实例:

var db1sequelize = new Sequelize('db1', 'db1user', 'db1pass'...);

db1sequelize.define('User', {...})
db1sequelize.define('Group', {...})

var db2sequelize = new Sequelize('db2', 'db2user', 'db2pass'...);

db2sequelize.define('Order', {...})

User.findAll(...)  // queries db1
Order.findAll(...) // queries db2

但是,我怀疑它们之间的关联不会很好。例如,您绝对可以将用户和组关联起来,因为它们都属于同一个架构:

User.hasMany(Group);

但要在订单和用户之间关联,我将改为手动添加列。

db2sequelize.define('Order', {
  userId: Sequelize.INTEGER,
  ...
})

User.create({...}).then(function(createdUser) {      // inserts in db1
  return Order.create({userId: createdUser.id, ...}) // inserts in db2
});

我也不确定这些数据库之间的事务将如何工作......

【讨论】:

  • 谢谢伙计,你的做法很有效。实际上,我最终为两个不同的数据库创建了两个不同的模型文件夹,因为我想继续收集所有模型并在需要时将它们关联起来,而不必担心每次需要使用它时都要导入每个新模型。协会不起作用,但对于我正在从事的项目,他们并不真正需要,所以一切都很好。再次感谢
  • 如果您在每个数据库中都有相同的模型,该怎么做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 2016-02-24
  • 2019-01-14
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多