2017-08-24 172 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,这是非常没有意义(除非特殊情况下,例如测试)。