我正在使用ReactiveMongo 0.12,并试图了解不同类型的连接池在ReactiveMongo中的工作方式之间的核心区别。
ReactiveMongo似乎提供了3种方法来建立与数据库的连接:
类型1:使用单连接池实例
import reactivemongo.api.MongoConnection
val driver1 = new reactivemongo.api.MongoDriver
val connection3 = driver1.connection(List("addressA: 27017", "addressB: 27017","addressC": 27017", "addressD: 27017"))类型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"))类型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"))这三种类型的连接之间有什么不同?在性能方面,哪一种是最好的方法?
发布于 2017-08-24 11:30:23
正如文档中所指出的,一方面有重量级类型的MongoDriver和MongoConnection (这意味着它们正在管理许多资源,作为网络通道)。
正如可以在文档中看到的那样,"MongoDriver持有参与者系统“(Akka作为实现细节:”驱动程序创建新的参与者系统“),而"MongoConnection对参与者的引用”管理连接池(“创建网络通道”)。
另一方面,正如前面提到的,"DefaultDB和Collection只是存储引用的普通对象,而不是其他任何东西。获取这样的引用是轻量级的“。
ActorSystem (作为内存和CPU成本)和一个连接池。ActorSystem,这是完全没有意义的(除了在非常具体的情况下,例如用于测试)。https://stackoverflow.com/questions/45859204
复制相似问题