2017-07-17 14 views
1

私はこのlibを使用してMeteor Web APIを構築していますが、Web APIの機能の1つは、 MeteorクライアントからのWeb要求。複数のデータベースに接続するMeteor Server-only Web App

私はそれがSO(Using Multiple Mongodb Databases with Meteor.js)を答えるこのからのみ流星アプリケーション1サーバ側から複数のデータベースに接続できるようになりまし理解:

リモート/複数のデータベースに接続することが可能になりました:

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

しかし、両方のデータベースで同じコレクション名を使用していれば、これは機能しますか?データベースは基本的にはレプリカですが、もちろんMONGO_URLが異なり、データが異なります。

。例えば

(1)クライアントからのWeb要求は、流星のWeb APIに入って来るでしょう。その要求には、データベースID = 2を指定したデータが含まれます。私はそのIDを参照し、それをデータベースのURLと照合します。私はそのデータベースに接続し、 "People"というコレクション名を取得し、そのデータを処理します。

(2)別のクライアントからの別のWeb要求がMeteor Web APIに入ります。今回はデータベースID = 4のWebアプリケーションがデータベースを検索し、別のURLに接続し、同じコレクション名「People」を取得しますが、もちろん今回は異なるデータを持っています(もちろんそれは別のデータベースです)。

同じコレクション名でも使用できますか?もしそうなら、それはどのように機能するでしょうか?また、2つの異なるデータベースに対する2つの要求が同時に発生するとどうなりますか?

図: 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の仕組みに基づいて、同じ名前を付けることはできません。

しかし、それらは2つの異なるデータベースに接続し、異なるデータベースは完全に異なるものです(2つのmongo URL文字列が同じでない限り)、その "データベースコレクション"名は同じになります。彼らはまだ2つの異なるデータベースの2つの異なるコレクションです。

データベースの観点からは、並行性は問題になりません。それらは異なるデータベースであるため、同時データベース呼び出しにもうまく対応できます。しかし、その後、再び、あなたのjavascriptのアプリケーションコードでは、JavaScriptがスレッド化されていないので、この同時実行を管理し、その結果と例外を処理することができますが、イベント化しなければなりません。

関連する問題