我正在使用此lib构建Meteor Web API,并且Web API的一个功能是它必须能够基于来自的Web请求连接多个数据库中的任何一个。流星客户端。
我了解现在可以通过此SO答案(Using Multiple Mongodb Databases with Meteor.js)从一个服务器端仅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匹配。我将连接到该数据库并提取集合名称&#34; People&#34;并对该数据进行处理。
(2)来自不同客户端的另一个Web请求进入Meteor Web API。这次使用数据库ID = 4,Web App查找数据库并连接到另一个不同的URL,并提取相同的集合名称,#34; People&#34;,但这次当然它有所不同数据(因为它当然是一个不同的数据库)。
这可以使用相同的集合名称吗?如果是这样,那将如何运作?另外,如果我有两个不同数据库的两个请求同时进入该怎么办?
答案 0 :(得分:3)
您应该定义“集合名称”是什么。
所以在这段代码中:
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 });
从“meteor app”的角度来看,MyCollection
和MyCollection2
是两个不同的javascript常量,因此是两个不同的“流星集合”。根据javascript的工作原理,它们的名称不能相同。
但是由于它们连接到两个不同的数据库而且不同的数据库是完全不同的东西(除非两个mongo url字符串是相同的),它们的“数据库集合”名称可以是相同的。它们仍然是两个不同数据库中的两个不同的集合。
从数据库的角度来看,并发性并不重要。他们可以很好地响应并发数据库调用,因为它们是不同的数据库。但话说回来,你的javascript应用程序代码必须能够管理这种并发并处理它的结果和异常,因为javascript没有线程化,而是偶然的。