当前位置: 首页 > 面试题库 >

续集:使用多个数据库

陆飞龙
2023-03-14
问题内容

如果要使用两个数据库,是否需要创建多个Sequelize实例?即,同一台计算机上的两个数据库。

如果没有,执行此操作的正确方法是什么?对我来说,必须两次连接才能使用两个数据库似乎有点过头了。

例如,对于不同的功能,我有不同的数据库,例如,假设一个数据库中有客户数据,而另一个数据库中有统计数据。

因此在MySQL中:

MySQL [customers]> show databases;
+--------------------+
| Database           |
+--------------------+
| customers          |
| stats              |
+--------------------+

我有这个与续集联系

// Create a connection....
var Sequelize = require('sequelize');
var sequelize = new Sequelize('customers', 'my_user', 'some_password', {
    host: 'localhost',
    dialect: 'mysql',

    pool: {
        max: 5,
        min: 0,
        idle: 10000
    },
    logging: function(output) {
        if (opts.log_queries) {
            log.it("sequelize_log",{log: output});
        }
    }

});

// Authenticate it.
sequelize.authenticate().nodeify(function(err) {

    // Do stuff....

});

我试图在使用点表示法的模型定义中“欺骗”它

var InterestingStatistics = sequelize.define('stats.interesting_statistics', { /* ... */ });

但这创建了表格customers.stats.interesting_statistics。我需要使用统计数据库中的现有表。

实现此目的的正确方法是什么?谢谢。


问题答案:

您需要为要创建的每个数据库连接创建不同的sequelize实例:

const Sequelize = require('Sequelize');
const userDb = new Sequelize(/* ... */);
const contentDb = new Sequelize(/* ... */);

从sequelize创建的每个实例都有其自己的数据库信息 (数据库主机,URL,用户,密码等)
,并且这些值无意更改,因此没有“正确”的方法来创建多个连接续集的实例。

从他们的文档

Sequelize将在初始化时设置一个连接池,因此理想情况下,每个数据库只能创建一个实例。

每个数据库一个实例

一种“通用”的方法是将数据库存储在config.json文件中,并在其上循环以动态创建连接,如下所示:

config.json

{
    /*...*/
    databases: {
        user: {
            path: 'xxxxxxxx'
        },
        content: {
            path: 'xxxxxxxx'
        }
    }
}

您的应用程式

const Sequelize = require('sequelize');
const config = require('./config.json');

// Loop through
const db = {};
const databases = Object.keys(config.databases);
for(let i = 0; i < databases.length; ++i) {
    let database = databases[i];
    let dbPath = config.databases[database];
    db[database] = new Sequelize( dbPath );
}

// Or a one liner
const db = Object.entries(config).reduce((r, db) => (r[db[0]] = db[1].path) && r, {});

// Sequelize instances:
// db.user
// db.content

您将需要多做一些编码才能使其启动并运行,但这是一个总体思路。



 类似资料:
  • 问题内容: 有人知道如何在hibernate配置中添加另一个数据源,以及如何在自己的DAO中将Spring配置为其自动注入该数据源吗? 这是我的带有一个数据源的代码,可以完美运行,但是我不知道如何添加另一个数据源。我想添加另一个数据源,该数据源是具有与实际数据库不同的表的数据库。 DAO EXAMPLE 问题答案: 我假定你有一组应使用的DAO的和适当的,而其他人应该使用不同的和基于。当然,你需要

  • 问题内容: database.php : 问题是我只能在配置中定义one ,default或stats。我遵循了CodeIgniter文档,并添加了以下内容: 这样,我连接到第二个数据库,但是失去了与第一个数据库的连接。有谁对如何加载两个数据库有任何想法,而不必在所有模型构造函数中执行以下操作? 问候, 佩德罗 问题答案: 除了应用Camacho提到的hack之外,您还可以将database.ph

  • 问题内容: 有人知道如何在hibernate配置中添加另一个数据源,以及如何在自己的DAO中将Spring配置为其自动注入该数据源吗? 这是我的带有一个数据源的代码,可以完美运行,但是我不知道如何添加另一个数据源。我想添加另一个数据源,该数据源是具有与实际数据库不同的表的数据库。 HIBERNATE CONF 道例 问题答案: 好。我找到了另一个解决方案,并且使用了相同的方法:添加另一个dataS

  • 所以,我已经找到了实现这一点的方法。我的阵列看起来一团糟。这个问题很难解释,所以我会提供一些图片和代码。 编辑:问题是for循环和x1,y1,z1变量由浮点数控制 制作3x3x1阵列会产生以下结果:

  • 当我试图在spring-boot上使用多个数据源时,我面临着一个巨大的问题。我的问题是因为我正在使用spring batch,而我没有足够的权限在我的生产数据库上从spring-batch创建元数据表,所以我需要使用例如H2来创建这些表,但是当我试图在我的模型中加载一个在我的作业处理器中具有关系为@OneToMany的字段时,我收到了LazyInitializationException Spri

  • 我使用JFreeChart在同一个图形上有两个数据集。我试图比较图表上的点的相似程度,因此我需要访问我之前放入图表中的两个数据集,但由于某种原因,我似乎无法提取这些信息。 以下是数据的输入方式: 数据最初是成对存储的,但我知道数据是输入的,因为图形正确地显示了数据。如何返回此数据集中的两个系列?