我正在使用ReactiveMongo 0.12,并尝试了解ReactiveMongo中不同类型的连接池如何工作之间的核心差异。
ReactiveMongo似乎提供了3种与数据库建立连接的方法:
TYPE 1:使用单一连接池实例
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 2:使用多个连接池实例
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:使用多个连接池
let a = [["a",1],["b",1],["c",1]];
let result = a.reduce((acc, e) => acc[e[0]]=e[1], {});
这三种连接有什么区别?哪种方法在性能方面最好?
答案 0 :(得分:1)
正如documentation所示,一方面有重量级类型MongoDriver
和MongoConnection
(重要的是它们管理着许多资源,作为网络渠道)。
正如可以在文档中看到的那样,“MongoDriver
拥有actor系统”(Akka作为实现细节:“驱动程序创建一个新的actor系统”)而“MongoConnection
引用了演员“管理连接池(”创建网络频道“)。
另一方面,如上所述,“DefaultDB
和Collection
只是存储引用的普通对象而不是其他内容。获取此类引用是轻量级的”。
ActorSystem
(作为内存和CPU
成本)和一个连接池。ActorSystem
,这是没有意义的(除非在非常具体的情况下,例如用于测试)。