了解MongoDB超时设置
我很难理解为我的应用程序配置的最佳超时设置有三种类型的超时设置: 连接超时 socketTimeoutMS maxTimeMS 除此之外,我们还有: 保持活力 池大小 自动重新连接 connectTimeout对应于应用程序在指定时间段内无法连接到mongoDB时的超时设置。我想这会导致一个例外 socketTimeoutMS对应于套接字在关闭之前等待从db服务器获取响应 maxTimeMS对应于数据库中运行的操作的超时。这将导致一个异常 socketTimeout和maxTimeout之间有什么区别?。我有一个要求,当对数据库的请求在{5}秒后超时时,我必须记录一个错误代码。未收到来自此数据库的响应。为此目的,最佳超时设置是什么了解MongoDB超时设置,mongodb,spring-boot,timeout,Mongodb,Spring Boot,Timeout,我很难理解为我的应用程序配置的最佳超时设置有三种类型的超时设置: 连接超时 socketTimeoutMS maxTimeMS 除此之外,我们还有: 保持活力 池大小 自动重新连接 connectTimeout对应于应用程序在指定时间段内无法连接到mongoDB时的超时设置。我想这会导致一个例外 socketTimeoutMS对应于套接字在关闭之前等待从db服务器获取响应 maxTimeMS对应于数据库中运行的操作的超时。这将导致一个异常 socketTimeout和maxTimeout之间有什
poolsize、keepAlive、auto-connected与超时设置的关系如何?示例会很有用。假设您有一个mongod运行 您连接到它,并运行一个查询,该查询扫描包含数百万文档的集合,而不使用索引 您将得到maxTimeMS的异常,因为查询运行的时间比这个长 比如说,你的mongod变得超负荷了。您的驱动程序仍然连接到套接字,但当您发送另一个查询时,它会在等待db响应套接字时超时。这就是socketTimeoutMS参数所控制的 这里有一些好消息 也在 Keepalive在
如果您在faq页面上的“poolsize”页面中找到,您将看到有关该页面的详细信息。假设您正在运行mongod 您连接到它,并运行一个查询,该查询扫描包含数百万文档的集合,而不使用索引 您将得到maxTimeMS的异常,因为查询运行的时间比这个长 比如说,你的mongod变得超负荷了。您的驱动程序仍然连接到套接字,但当您发送另一个查询时,它会在等待db响应套接字时超时。这就是socketTimeoutMS参数所控制的 这里有一些好消息 也在 Keepalive在
如果您在faq页面的“poolsize”页面中找到,您将看到有关该问题的详细信息。最简单的超时解释是套接字超时。每当在套接字上执行读取或写入操作时,如果该读取或写入操作花费的时间超过超时时间,则操作将失败并出现错误 但是,设置套接字超时远远不简单。执行查询时,服务器在至少有一个文档(或确定没有匹配的文档)之前不会回复。这意味着套接字超时必须设置为至少与应用程序将发出的最长运行查询一样高 此外,单个查询可能涉及多个读取或写入。因此,可以想象,缓慢的网络实际上不会触发超时 解决此问题的方法是最大限度地延长时间并保持生命:
- 最大时间限制查询在服务器上执行的时间。超过此限制时,服务器将返回一个错误。然后应用程序知道查询花费的时间太长,而不是存在网络问题。此外,客户端停止等待的长时间运行的查询在完成之前不会在服务器上运行,这可能需要相当长的时间
- 保持活动状态是一种定期从连接一端向另一端发送“ping”以识别死连接的方法。keep-alive设置的设置有些复杂,但其目的是允许长时间运行的查询成功完成,同时相对快速地检测网络错误。所有MongoDB驱动程序都会将alives配置为合理的默认值(大约2分钟),如果您愿意,可以降低间隔
池大小实际上与超时没有任何关系,自动重新连接是一个特定于驱动程序的选项,与超时也不属于同一类别。最简单的超时解释是套接字超时。每当在套接字上执行读取或写入操作时,如果该读取或写入操作花费的时间超过超时时间,则操作将失败并出现错误 但是,设置套接字超时远远不简单。执行查询时,服务器在至少有一个文档(或确定没有匹配的文档)之前不会回复。这意味着套接字超时必须设置为至少与应用程序将发出的最长运行查询一样高 此外,单个查询可能涉及多个读取或写入。因此,可以想象,缓慢的网络实际上不会触发超时 解决此问题的方法是最大限度地延长时间并保持生命:
- 最大时间限制查询在服务器上执行的时间。超过此限制时,服务器将返回一个错误。然后应用程序知道查询花费的时间太长,而不是存在网络问题。此外,客户端停止等待的长时间运行的查询在完成之前不会在服务器上运行,这可能需要相当长的时间
- 保持活动状态是一种定期从连接一端向另一端发送“ping”以识别死连接的方法。keep-alive设置的设置有些复杂,但其目的是允许长时间运行的查询在运行时成功完成