参考 > 复写 > 复制集读取和写入语义 > 阅读偏好 > maxStalenessSeconds
3.4版的新功能。
由于网络拥塞,磁盘吞吐量低,运行时间长等原因,副本集成员可能会落后于主副本。“读取首maxStalenessSeconds
选项”选项可让您指定最大的复制延迟或“陈旧性”,以便从辅助副本读取内容。当辅助节点的估计陈旧度超过时
maxStalenessSeconds
,客户端将停止将其用于读取操作。
重要
在maxStalenessSeconds
读取首选项用于从次级阅读,并希望避免从已经下降过于远远落后于复制一次的写入辅助阅读应用。例如,辅助节点可能由于其自身与主要节点之间的网络中断而停止复制。在这种情况下,客户端应停止从辅助服务器读取数据,直到管理员解决中断并辅助服务器追赶为止。
要使用maxStalenessSeconds
,部署中的所有MongoDB实例必须使用MongoDB 3.4或更高版本。如果任何实例在MongoDB的早期版本上,则驱动程序或mongos
将引发错误。
注意
从4.2版开始,MongoDB引入了一种流控制机制来控制主数据库应用其写入的速率,以将延迟保持在指定的最大值以下。majority
committed
您可以使用maxStalenessSeconds
以下读取首选项模式指定:
最大陈旧度与模式不兼容,primary
仅在选择集合的
次要成员进行读取操作时适用。
当选择服务器进行读取操作时maxStalenessSeconds
,客户端通过将辅助服务器的上次写入与主服务器的最后一次写入进行比较,估计每个辅助服务器的陈旧程度。然后,客户端会将读取操作定向到辅助计算机,该辅助计算机的估计延迟小于或等于
maxStalenessSeconds
。
如果没有主服务器,客户端将使用具有最新写入操作的辅助服务器进行比较。
默认情况下,没有最大的陈旧性,并且在选择将读取操作定向到何处时,客户端不会考虑辅助节点的延迟。
您必须指定maxStalenessSeconds
90秒或更长时间的maxStalenessSeconds
值:指定较小的值将引发错误。客户通过定期检查每个副本集成员的最新写入日期来估计次要节点的陈旧性。由于这些检查很少,因此陈旧性估计值很粗糙。因此,客户端不能强制执行maxStalenessSeconds
小于90秒的值。