了解 MongoDB 超时设置

Fer*_*ndo 1 timeout mongodb spring-boot

我很难理解为我的应用程序配置的最佳超时设置是什么 超时设置分为三种类型:

connectTimeoutMS socketTimeoutMS maxTimeMS

除此之外,我们还有:

KeepAlive poolSize 自动重新连接

connectTimeout对应的是应用程序在指定时间范围内无法连接到mongoDB时的超时设置。我认为这会导致异常。

socketTimeoutMS 对应于套接字在关闭之前等待从数据库服务器获取响应。

maxTimeMS 对应于数据库中运行的操作的超时。这会导致异常。

socketTimeout 和 maxTimeout 有什么区别?我的要求是,当对数据库的请求在 {5} 秒后超时时,我必须记录错误代码。未从该数据库收到任何响应。为此目的的最佳超时设置是什么?

poolsize、keepAlive、autoconnected 是如何与超时设置关联的?例子会很有用。

D. *_* SM 5

最简单的超时解释是套接字超时。每当在套接字上执行读取或写入时,如果读取或写入时间超过超时,则操作将失败并出现错误。

然而,设置套接字超时远非简单。当执行查询时,服务器直到至少有一个文档(或者确定没有文档匹配)才会回复。这意味着套接字超时必须设置为至少与应用程序将发出的运行时间最长的查询一样高

另外,单个查询可能涉及多次读取或写入。因此,可以想象,缓慢的网络实际上不会触发超时。

解决这个问题的方法是最大时间和保持活动:

  • 最大时间限制查询在服务器上执行的时间。当超过此限制时,服务器将返回错误。然后,应用程序知道查询花费的时间太长,而不是存在网络问题。此外,客户端停止等待的长时间运行的查询在完成之前不会在服务器上运行,这可能需要相当长的时间。
  • 保持活动是一项TCP 功能,它定期从连接的一端向另一端发送“ping”以识别死连接。保持活动设置的设置稍微复杂一些,但其目的是允许长时间运行的查询成功完成,同时相对较快地检测网络错误。所有 MongoDB 驱动程序都将 keep-alive 配置为合理的默认值(大约 2 分钟),如果您愿意,可以降低间隔。

连接超时与套接字超时类似,但在首次建立连接时应用。因此,它可以设置为低于套接字超时,因为它不需要受到查询执行时间的限制。通过设置较低的连接超时,可以在首次连接时更快地检测到失效服务器。

池大小实际上与超时没有任何关系,并且自动重新连接是特定于驱动程序的选项,实际上与超时并不属于同一类别。