MongoDB 2.6:实例/数据库级别的maxTimeMS
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 2.6:实例/数据库级别的maxTimeMS相关的知识,希望对你有一定的参考价值。
MongoDB 2.6引入了.maxTimeMS()游标方法,该方法允许您为每个查询指定最大运行时间。这对于即席查询来说非常棒,但我想知道是否有办法在每个实例或每个数据库(甚至每个集合)级别设置此值,以尝试阻止锁定。
如果是这样,那么在每个查询的基础上,该值是否可以是OVERWRITTEN?我想设置3000ms左右的实例级别超时(因为这对我的应用程序发出的查询来说是一个非常极端的运行时间),但如果我有一个报告要运行,那么就可以忽略它。
这是mongodb.org的文档,供参考:http://docs.mongodb.org/manual/reference/method/cursor.maxTimeMS/#behaviors
杰森,
目前,MongoDB不支持全局/通用“maxTimeMS”。此选项仅适用于单个操作。如果你希望MongoDB中有这样的全局设置,我建议你在https://jira.mongodb.org/browse/SERVER上提供一个SERVER票证以及可以利用这种设置的用例。
我知道这已经老了但是来到这里有一个类似的问题,并决定发布我的发现,作为一个全局参数的超时由驱动程序作为连接字符串的一部分支持,这是有道理的,因为它是驱动程序可以控制这个全局参数,在这里你可以找到关于这个的文档: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脚本时复制将花费更长的时间进行初始化。
希望这有助于其他人提出同样的问题。
以上是关于MongoDB 2.6:实例/数据库级别的maxTimeMS的主要内容,如果未能解决你的问题,请参考以下文章