MongoDB 2.6:实例/数据库级别的maxTimeMS

时间:2014-04-28 15:00:51

标签: mongodb timeout

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

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

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

2 个答案:

答案 0 :(得分:2)

杰森,

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

答案 1 :(得分:0)

我知道这很老了,但是来到这里有一个类似的问题,因此决定发布我的发现:作为全局参数的超时由驱动程序作为连接字符串的一部分来支持,这很有意义,因为它是驱动程序可以控制此全局参数的驱动程序,在这里您可以找到关于此文件的文档: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段,并且必须先确认3个节点返回结果是,如果您重新启动数据库并使用wtimeout为1(表示1毫秒),则会看到一个异常,因为第一次执行python脚本时,复制将花费更长的时间来初始化。

希望这有助于其他人提出相同的问题。