2017-08-24 220 views
0

我正在使用ReactiveMongo 0.12,並試圖瞭解不同類型的連接池如何在ReactiveMongo中工作的核心差異。ReactiveMongo:單連接池實例VS很多連接池實例VS多連接池

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

您可以使用[MailingList](https://groups.google.com/forum/?fromgroups#!forum/reactivemongo)提問。 – cchantep

回答

1

documentation所示,一方面存在重量級類型MongoDriverMongoConnection(重要的是它們正在管理許多資源,如網絡信道)。

因爲它可以在文檔中寫着「MongoDriver持有演員系統」(阿卡的實施細則:「驅動程序創建一個新的演員系統」),而「MongoConnection引用的演員」管理連接池( 「創建網絡頻道」)。

另一方面,如上所述,「DefaultDBCollection只是存儲引用的普通對象,沒有其他東西。獲取這樣的引用是輕量級的」。

  • 所以殼體1使用單個ActorSystem(其作爲存儲器和CPU 成本),和一個單一的連接池。
  • 殼體2從第一個的不同之處它 定義2個連接池,如果使用不同 節點(ReplicaSet),或具有不同 連接選項中相同的節點這隻能是有意義的。
  • 終於情況3不同於第二個使用多個驅動程序,因此多個ActorSystem,這是非常沒有意義(除非特殊情況下,例如測試)。