单个数据库上的多个Sequelize实例

时间:2016-08-30 08:43:46

标签: node.js namespaces sequelize.js

我使用 Sequelize 作为ORM的微服务很少。 为简单起见,我希望所有人共享一个数据库,即使它们没有任何共同之处。

我需要每个微服务:

  • 它自己的Sequelize迁移表,所以我可以安全地使用回滚功能。
  • 根据微服务名称,每个表都需要一个名称空间。例如exec find /projects/corpeng/members/ldagan/adm/utils/Synopsys/CCK/shared_tcl_code -name "*.tcl" | grep -v regression | xargs grep -Plc "^[ ]*namespace[ ]+eval[ ]+DlgViolationKeepProcs " > grep: nothing to repeat ms1_table1

我在docs或Google中找不到任何相关内容。该问题的任何想法或包装?

2 个答案:

答案 0 :(得分:1)

尝试将单个Db划分为多个模式(每个模式用于微服务等) - 从这种分离开始也是一个很好的做法。 然后,Sequelize有架构支持(在构造函数中你将它传递给options.schema - 默认是' public')。

尝试查看sequelize documentation以获取有关架构的更多信息。

这会解决您的问题吗?

答案 1 :(得分:0)

默认情况下,sequelize将迁移元信息存储在同一数据库内的表中。这是您的主要路障。

您可能希望为每个服务使用不同的表名

    {
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "MySQL", 

    // Use a different table name. Default: SequelizeMeta
    "migrationStorageTableName": "sequelize_meta",

    // Use a different schema for the SequelizeMeta table
    "migrationStorageTableSchema": "custom_schema"
  }
}

这有助于使每个微服务的隔离迁移行为发生,尽管它们都在同一数据库中