【问题标题】:MongoDB 2.6: maxTimeMS on an instance/database levelMongoDB 2.6:实例/数据库级别的 maxTimeMS
【发布时间】:2014-04-28 15:00:51
【问题描述】:

MongoDB 2.6 引入了 .maxTimeMS() 游标方法,它允许您为每个查询指定最大运行时间。这对于即席查询来说很棒,但我想知道是否有办法在每个实例或每个数据库(甚至每个集合)级别上设置此值,以尝试防止一般锁定。

如果是这样,那么该值是否可以在每个查询的基础上被覆盖?我希望将实例级别的超时设置为 3000 毫秒左右(因为对于我的应用程序发出的查询来说,这将是一个非常极端的运行时间),但是如果我要运行报告,则可以忽略它。

这是来自 mongodb.org 的文档,供参考:http://docs.mongodb.org/manual/reference/method/cursor.maxTimeMS/#behaviors

【问题讨论】:

    标签: mongodb timeout


    【解决方案1】:

    杰森,

    目前 MongoDB 不支持全局/通用“maxTimeMS”。目前,此选项仅适用于单个操作。如果您希望在 MongoDB 中提供这样的全局设置,我建议在 https://jira.mongodb.org/browse/SERVER 提出 SERVER 票证以及可以利用此类设置的用例。

    【讨论】:

      【解决方案2】:

      我知道这很旧,但带着类似的问题来到这里并决定发布我的发现,作为全局参数的超时由驱动程序支持作为连接字符串的一部分,这是有道理的,因为它是驱动程序一个可以控制这个全局参数的,在这里你可以找到关于这个的文档:https://docs.mongodb.com/manual/reference/connection-string/,但是每个驱动程序可以处理这个略有不同(例如,c#为此使用Mongo Settings参数,python将它作为init构造函数中的参数,等等)

      要对此进行测试,您可以使用 mtools 启动一个测试服务器,如下所示:

      mlaunch --replicaset --name testrepl --nodes 3 --port 27000
      

      那么python中的一个例子会是这样的:

      from pymongo import MongoClient
      
      c =  MongoClient(host="mongodb://localhost:27000,localhost:27001,localhost:27002/?replicaSet=testrepl&wtimeoutMS=2000&w=3")
      c.test_database.col.insert({ "name": "test" })
      

      我使用的是URI方式,所以可以在其他驱动中使用,但是Python也支持参数w和wtimeout,在这个例子中所有的写操作将默认为2 segs和3个节点之前必须确认返回时,如果您重新启动数据库并使用 wtimeout 1(表示 1 毫秒),您将看到一个异常,因为在您第一次执行 python 脚本时,复制将需要更长的时间来初始化。

      希望这可以帮助其他有相同问题的人。

      【讨论】:

        猜你喜欢
        • 2021-07-19
        • 2017-04-13
        • 2020-09-08
        • 2022-12-15
        • 1970-01-01
        • 2011-04-23
        • 2020-11-05
        • 1970-01-01
        • 2021-02-22
        相关资源
        最近更新 更多