【问题标题】:How to use Cashbah MongoDB connections?如何使用 Cashbah MongoDB 连接?
【发布时间】:2014-08-04 07:40:44
【问题描述】:

注意:我知道 there is a similar question on 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")
    ...
  }
}

所以,我从不关闭 MongoClient。

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

谢谢

【问题讨论】:

  • 所以您尝试使用MongoOptions,正如该问题中所建议的那样?是否有任何示例代码可以重现连接池不[与此自定义一起使用]这一事实?
  • 请不要继续delete previous questions然后再这样问他们。

标签: mongodb scala casbah database


【解决方案1】:

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

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

如果您在网络服务环境中使用,例如,您应该 创建一个 MongoClient 实例,您可以在每个实例中使用它 要求。 MongoClient 对象维护一个内部池 与数据库的连接(默认最大池大小为 100)。为了 对数据库的每个请求(查找、插入等)Java 线程都会 从池中获取连接,执行操作,释放 连接。这意味着使用的连接(套接字)可能是 每次都不一样。

顺便说一句,这就是我在制作中所经历的。我没有发现任何问题。

【讨论】:

  • 你有什么解释为什么我的应用程序运行一段时间后出现“SocketException: Too many open files”。并且在执行 lsof 时,我看到的连接数超过了 100 个……?
  • 您确定要重用同一个 MongoClient 对象吗?会不会是你在创建多个?
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 2021-11-29
  • 2014-03-03
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多