2017-08-24 17 views
0

ReactiveMongo 0.12を使用していて、ReactiveMongoでさまざまなタイプの接続プールがどのように機能するかの違いを理解しようとしています。ReactiveMongo:単一の接続プールインスタンスと複数の接続プールインスタンスと複数の接続プールとの比較

ReactiveMongoは、我々はデータベースとの接続を確立することが可能な3つの方法を提供するようだ:

TYPE 1:シングル接続プールインスタンスを使用した

import reactivemongo.api.MongoConnection 
val driver1 = new reactivemongo.api.MongoDriver 
val connection3 = driver1.connection(List("addressA: 27017", "addressB: 27017","addressC": 27017", "addressD: 27017")) 

TYPE 2:複数の接続プールインスタンスの使用を

import reactivemongo.api.MongoConnection 
val driver1 = new reactivemongo.api.MongoDriver 
val connection1 = driver1.connection(List("addressA", "addressB")) 
val connection2 = driver1.connection(List("addressC", "addressD")) 

TYPE 3:使用して複数の接続プール

import reactivemongo.api.MongoConnection 
val driver1 = new reactivemongo.api.MongoDriver // first pool 
    val driver2 = new reactivemongo.api.MongoDriver // second pool 

    // Pick a connection from the first pool 
    def connection1 = driver1.connection(List("addressA", "addressB")) 

    // Pick a connection from the second pool 
    def connection2 = driver2.connection(List("addressC", "addressD")) 

接続のこれらの3つのタイプの違いは何ですか?パフォーマンスの面ではどのアプローチが最適でしょうか?

+0

[メーリングリスト](https://groups.google.com/forum/?fromgroups#!forum/reactivemongo)を使用して質問することができます。 – cchantep

答えて

1

documentationに示されているように、一方の側には重量型MongoDriverMongoConnectionがあります(これは、ネットワークチャネルとして多くのリソースを管理しているという意味です)。

MongoConnectionアクターへの参照」が接続プールを管理している間に、「MongoDriverはアクターシステムを保持しています」(アクカの実装の詳細は「ドライバは新しいアクターシステムを作成します」) 「ネットワークチャネルの作成」を参照)。

一方、「DefaultDB」と「Collection」は、参照を格納するだけの単なるオブジェクトであり、他には何もありません。使用される1

  • だから場合単一ActorSystem(どのメモリとCPU コストなど)、および単一の接続プール。
  • それ が異なるノード(さらにreplicaSet)、または異なる 接続オプションを使用して同じノードを使用している場合にのみ意味をなす可能性が2つの接続プールを定義するように2が最初のものと異なる場合
  • 最後にケース3は、複数のドライバを使用する2番目のドライバと異なり、非常に意味のない複数のドライバを使用しています(非常に特殊な場合を除いて、たとえばテスト用)。