mongodb - 如何使用 pymongo MongoClient 构造函数在给定时间限制后中止 mongo 操作?
问题描述
根据此响应,您可以通过 find() 参数或集合方法设置查询操作的时间限制:
cursor = db.collection.find(max_time_ms=1)
或者
cursor = db.collection.find().max_time_ms(1)
医生说:
- max_time_ms(可选):指定查询操作的时间限制。如果超过指定的时间,操作将被中止并引发 ExecutionTimeout。传递它作为在游标上调用 max_time_ms() 的替代方法。
我们目前遇到的问题是一个查询运行了大约 30 分钟,然后它吃掉了所有的 RAM 并且服务器死了。我希望这个参数对查询给出一个硬限制,并且在给定时间之后服务器放弃。
由于我们的应用充满了find
s和游标:有没有办法直接在MongoClient
构造函数中设置这个参数?
医生说:
socketTimeoutMS:(整数或无)控制驱动程序在发送普通(非监控)数据库操作后等待响应的时间(以毫秒为单位),然后再断定发生网络错误。默认为无(无超时)。
connectTimeoutMS:(整数或无)控制在服务器监控期间驱动程序将等待多长时间(以毫秒为单位),在断定服务器不可用之前将新套接字连接到服务器时。默认为 20000(20 秒)。
serverSelectionTimeoutMS:(整数)控制驱动程序等待多长时间(以毫秒为单位)以找到可用的合适的服务器来执行数据库操作;在等待期间,可能会执行多个服务器监控操作,每个操作由 connectTimeoutMS 控制。默认为 30000(30 秒)。
...找不到另一个超时,而且这些似乎都不等同于max_time_ms
. 我错过了什么吗?
解决方案
推荐阅读
- python-3.x - 如何从python3中的同级目录导入?
- animation - Windows 合成 API 是否支持 2.5D 投影旋转?
- c# - 状态/会话管理 - 与 WPF 的统一
- android - Kotlin 关于将 lambda 作为属性传递
- javascript - 如何在 App 启动时使用 redux 开始获取?
- java - 如何创建一个循环来实现递归二进制搜索以搜索数组中的 n 个数字?JAVA
- r - 无法在 Shiny 应用程序中运行 RSelenium rsDriver
- angular - rxjs observable中的'of'是什么意思
- ruby-on-rails - 执行 .limit() 后如何获取 activerecord 对象的子集?
- if-statement - Shopify 价格条件未得到遵守