【问题标题】:Meteor Server-only Web App connecting to Multiple DatabasesMeteor Server-only Web App 连接到多个数据库
【发布时间】:2017-12-22 05:45:03
【问题描述】:

我正在使用lib 构建一个 Meteor Web API,Web API 的特性之一是它必须能够根据来自 Meteor 客户端的 Web 请求连接多个数据库中的任何一个。

.

我知道现在可以通过这个 SO 答案 (Using Multiple Mongodb Databases with Meteor.js) 从一个 Server Side Only Meteor 应用程序连接到多个数据库:

现在可以连接到远程/多个数据库:

var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });

但是,这是否可行,如果您在两个数据库中具有相同的集合名称,是否可行?数据库基本上是副本,当然具有不同的 MONGO_URL 和不同的数据。

.

例如:

(1) 来自客户端的 Web 请求将进入 Meteor Web API。该请求将包含指定数据库 ID=2 的数据。我会查找该 ID 并将其与数据库 URL 匹配。我将连接到该数据库并提取集合名称“People”并对该数据进行处理。

.

(2) 来自不同客户端的另一个 Web 请求进入 Meteor Web API。这次使用数据库 ID=4,Web 应用程序查找数据库并连接到另一个不同的 URL,并拉入相同的集合名称“People”,但这次它当然有不同的数据(因为当然这是一个不同的数据库)。

.

这可以使用相同的集合名称吗?如果是这样,那将如何工作?另外,如果我同时收到两个不同数据库的请求怎么办?

图表:

【问题讨论】:

    标签: javascript mongodb meteor asp.net-web-api


    【解决方案1】:

    您应该定义什么是“集合名称”。

    所以在这段代码中:

    const database = new MongoInternals.RemoteCollectionDriver("<mongo url 1>");
    const MyCollection = new Mongo.Collection("collection_name", { _driver: database });
    
    const database2 = new MongoInternals.RemoteCollectionDriver("<mongo url 2>");
    const MyCollection2 = new Mongo.Collection("collection_name", { _driver: database2 });
    

    从“流星应用”的角度来看,MyCollectionMyCollection2 是两个不同的 javascript 常量,因此是两个不同的“流星集合”。根据 javascript 的工作原理,它们不能命名相同。

    但是由于它们连接到两个不同的数据库,不同的数据库是完全不同的东西(除非两个mongo url字符串相同),所以它们的“数据库集合”名称可以相同。它们仍然是两个不同数据库中的两个不同集合。

    从数据库的角度来看,并发也无关紧要。它们可以很好地响应并发数据库调用,因为它们是不同的数据库。但话又说回来,您的 javascript 应用程序代码必须能够管理这种并发性并处理其结果和异常,因为 javascript 不是线程化的,而是事件化的。

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多