【发布时间】:2014-08-07 06:44:21
【问题描述】:
我看到人们在使用后关闭光标。我还在文档中读到服务器在 10 分钟不活动后关闭光标。
我在网上搜索但没有找到正确的答案。我是数据库和 MongoDB 的新手。
为什么需要关闭光标?
【问题讨论】:
标签: mongodb memory-leaks mongodb-query database-cursor
我看到人们在使用后关闭光标。我还在文档中读到服务器在 10 分钟不活动后关闭光标。
我在网上搜索但没有找到正确的答案。我是数据库和 MongoDB 的新手。
为什么需要关闭光标?
【问题讨论】:
标签: mongodb memory-leaks mongodb-query database-cursor
只有在您没有“耗尽”结果时才真正需要关闭光标。或者换句话说,遍历游标返回的所有可能结果。
让“光标”处于打开状态就像是留下一个永远不会被重复使用的打开连接。这些东西不是免费的。事实上,标准连接成本是 1MB(大约)。因此,如果您留下大量“部分迭代”的游标,那么在活动连接和内存使用方面都会产生一般开销。
如果实际上您实际上总是迭代“所有”结果(其中包括一个“限制”,即“光标修饰符”),那么光标将关闭并且一切正常。
一般用法是通过查看所有结果来实际耗尽/耗尽光标。因此没有明确的需要销毁。
【讨论】:
这取决于您的使用情况,但至少在我的 Web 应用程序中 - 客户端处理关闭。 为什么?因为我的 Web 应用程序遵循短且无状态的请求处理模式(您从浏览器获得请求,快速构建 HTTP 响应 - 不到一秒 - 此响应依赖于 mongo 数据)。所以我的客户端只需要 1 秒的连接。
现在,考虑一下,如果我每分钟有(比如说)50 个请求……我的服务器可以轻松地处理它们。但是,如果每个请求都保留资源 10 分钟,它就会崩溃……例如9 分钟后,我将拥有 450 个不必要的开放资源...
【讨论】: