2017-07-17 66 views
1

我建立使用该lib流星的Web API,以及在Web API的特点之一是它必须能够连接根据几个数据库中的任何一个来自Meteor客户端的Web请求。流星服务器仅Web应用程序连接到多个数据库

我了解,现在有可能从一个服务器端只有从这一流星应用程序连接到多个数据库,以便回答(Using Multiple Mongodb Databases with Meteor.js):

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

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

然而,这是否工作,不,如果你有这两个数据库中相同的集合名称工作?数据库基本上是复制品,当然有不同的MONGO_URL和不同的数据。

例如:

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

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

可以用相同的集合名称这项工作?如果是这样会如何工作?另外,如果我有两个请求两个不同的数据库同时进来?

的图: enter image description here

回答

2

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

左右的时间内验证码:

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的工作原理,它们不能命名相同。

但由于它们连接到两个不同的数据库,不同的数据库是完全不同的事情(除非这两个蒙戈URL字符串是一样的),他们的“数据库集合”的名称可以相同。它们仍然是两个不同数据库中的两个不同的集合。

从数据库的角度来看,并发无所谓无论是。他们可以响应并发数据库调用,因为它们是不同的数据库。但是,再次,您的JavaScript应用程序代码必须能够管理此并发性并处理其结果和异常,因为JavaScript不是线程化的,而是完成了。

相关问题