2017-07-17 67 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不是線程化的,而是完成了。

相關問題