首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactiveMongo:单个连接池实例Vs多个连接池实例与多个连接池

ReactiveMongo:单个连接池实例Vs多个连接池实例与多个连接池
EN

Stack Overflow用户
提问于 2017-08-24 10:28:27
回答 1查看 377关注 0票数 0

我正在使用ReactiveMongo 0.12,并试图了解不同类型的连接池在ReactiveMongo中的工作方式之间的核心区别。

ReactiveMongo似乎提供了3种方法来建立与数据库的连接:

类型1:使用单连接池实例

代码语言:javascript
复制
import reactivemongo.api.MongoConnection
val driver1 = new reactivemongo.api.MongoDriver
val connection3 = driver1.connection(List("addressA: 27017", "addressB: 27017","addressC": 27017", "addressD: 27017"))

类型2:使用多个连接池实例

代码语言:javascript
复制
import reactivemongo.api.MongoConnection
val driver1 = new reactivemongo.api.MongoDriver
val connection1 = driver1.connection(List("addressA", "addressB"))
val connection2 = driver1.connection(List("addressC", "addressD"))

类型3:使用多个连接池

代码语言:javascript
复制
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"))

这三种类型的连接之间有什么不同?在性能方面,哪一种是最好的方法?

EN

回答 1

Stack Overflow用户

发布于 2017-08-24 11:30:23

正如文档中所指出的,一方面有重量级类型的MongoDriverMongoConnection (这意味着它们正在管理许多资源,作为网络通道)。

正如可以在文档中看到的那样,"MongoDriver持有参与者系统“(Akka作为实现细节:”驱动程序创建新的参与者系统“),而"MongoConnection对参与者的引用”管理连接池(“创建网络通道”)。

另一方面,正如前面提到的,"DefaultDBCollection只是存储引用的普通对象,而不是其他任何东西。获取这样的引用是轻量级的“。

  • 因此,案例1是使用单个ActorSystem (作为内存和CPU成本)和一个连接池。
  • 案例2与第一个不同,因为它定义了2个连接池,只有在使用不同节点(ReplicaSet)或具有不同连接选项的相同节点时才有意义。
  • 最后,案例3与使用多个驱动程序的第二个例子不同,因此使用多个ActorSystem,这是完全没有意义的(除了在非常具体的情况下,例如用于测试)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45859204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档