【问题标题】:How to configure two different datasource for a model in Strongloop Loopback framework?如何在 Strongloop Loopback 框架中为模型配置两个不同的数据源?
【发布时间】:2015-09-19 07:37:28
【问题描述】:

我们的 MySQL 数据库设置了写入集群和读取集群,有没有办法设置 Strongloop Loopback 模型(例如用户)来写入 MySQL 主机 A 并从 MySQL 主机 B 读取?

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

    如果您想更改单个模型的数据源,请尝试使用 attachTo()。例如

    app.models.YourModel.attachTo(app.dataSources.readDS);
    readData();
    ...
    app.models.YourModel.attachTo(app.dataSources.writeDS);
    writeData();
    

    您必须在 datasources.json 文件中定义 readDS 和 writeDS 数据源:

    {
     "readDS": {
        "host": "hostA",    
        "database": "dbOnHostA",
        "username": "user",
        "password": "password",
        "name": "readDS",
        "connector": "mysql"
      },
    
     "writeDS": {
        "host": "hostB",
        "database": "dbOnHostB",
        "username": "user",
        "password": "password",
        "name": "writeDS",
        "connector": "mysql"
      }
    }
    

    或者您可以动态创建数据源。

    【讨论】:

    • 谢谢。这应该可以工作,因为它会在您保存之前更改模型的数据源。唯一的麻烦部分是您必须始终在保存或读取之前设置它,以确保您访问正确的数据源。目前实际上没有办法在model-config.json中定义不同的读/写源。
    • 如果对 Create 进行 REST 调用并切换到 WriteDB 并且对 READ 进行 REST 调用,我还没有测试过这种情况。这会导致 Read REST 从错误的数据库中读取吗?跨度>
    • stackoverflow.com/questions/5153492/… 回答了我上面的问题。所以切换数据库附件是安全的。
    • @MianLeow 某些操作可能会触发异步操作,这可能会导致不需要的行为。例如,如果您正在使用 include(relations) 进行查找操作,则您的操作不再是原子操作,因为它具有异步操作。
    • 其实我也在做同样的事情。在请求之前切换数据库但在运行时切换上下文会导致问题。如果我们同时对不同的数据库发出两个请求,服务器会抛出 404,因为它在不同的数据库中查找它应该的数据库。你遇到过这个问题吗?或者你有解决这个问题的办法吗?
    【解决方案2】:

    在 loopback 2.0 中,您可以尝试覆盖 getDataSource 方法并根据上下文返回不同的数据源。但是在 loopback 3.0 中,上下文已经被移除,并且选项也没有传递给 getDataSource,所以要达到完美将是一个挑战。

    【讨论】:

      【解决方案3】:

      您可以定义任意数量的数据源,如 here 所记录的那样

      然后,您应该能够通过添加 ACL 来控制访问类型来设置您控制数据的方式。在这种情况下,读或写。这方面的文档可以在here

      找到

      【讨论】:

      • 我知道您可以在 datasources.json 中创建尽可能多的数据源,但我只能将一个数据源附加到 model-config.json 中的特定模型。我有兴趣弄清楚如何为同一模型定义不同的数据源用于写入和读取。
      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2015-10-16
      • 2016-12-14
      • 2015-09-26
      • 2016-07-04
      相关资源
      最近更新 更多