如何使用Cashbah MongoDB连接?

use*_*915 7 database scala mongodb casbah

注意:我意识到在SO上有一个类似的问题,但是它谈到了Casbah的旧版本,而且,答案中解释的行为不是我所看到的!

我的印象是Casbah的MongoClient处理连接池.然而,在我的进程中做lsof我看到一个庞大且越来越多的mongodb连接,这让我怀疑这个池真的存在.

基本上,这就是我正在做的事情:

class MongodbDataStore {
  val mongoClient = MongoClient("host",27017)("database")

  var getObject1(): Object1 = {
    val collection = mongoClient("object1Collection")
    ...
  }

  var getObject2(): Object2 = {
    val collection = mongoClient("object2Collection")
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,我从不关闭MongoClient.

我应该在每次查询后关闭它吗?实现我自己的池?然后怎样呢?

谢谢

Rot*_*mon 7

Casbah是MongoDB Java客户端的包装器,因此连接实际上是由它管理的.

根据Java驱动程序文档(http://docs.mongodb.org/ecosystem/drivers/java-concurrency/):

例如,如果您在Web服务环境中使用,则应创建一个MongoClient实例,并且可以在每个请求中使用它.MongoClient对象维护与数据库的内部连接池(默认最大池大小为100).对于DB的每个请求(查找,插入等),Java线程将从池中获取连接,执行操作并释放连接.这意味着每次使用的连接(套接字)可能不同.

顺便说一下,这就是我在制作中经历的.我没有看到任何问题.