可重试读取

    在本页面

    可重试读取允许MongoDB驱动程序在遇到某些网络或服务器错误时,可以一次自动重试某些读取操作。

    前提条件

    最小驱动程序版本

    ​ 官方MongoDB驱动兼容MongoDB服务器4.2和以后支持重试读取。

    ​ 有关官方MongoDB驱动程序的更多信息,请参阅 MongoDB驱动程序

    最低服务器版本

    ​ 如果连接到MongoDB Server 3.6或更高版本,驱动程序只能重试读取操作。

    启用可重试读取

    官方MongoDB驱动程序兼容MongoDB服务器4.2和以后默认启用可重试读取。要显式禁用可重试读取,请在部署的连接字符串中中指定retryReads=false

    mongoshell不支持重试读取。

    可重试的读取操作

    MongoDB驱动程序支持重试以下读取操作。列表引用了每个方法的通用描述。对于特定的语法和用法,请遵循该方法的驱动程序文档。

    方法 内容描述
    Collection.aggregate
    Collection.count
    Collection.countDocuments
    Collection.distinct
    Collection.estimatedDocumentCount
    Collection.find
    Database.aggregate
    CRUD API读取操作.

    对于Collection.aggregateDatabase.aggregate,驱动程序只能重试不包括写阶段的聚合管道,如$out$merge

    Collection.watch
    Database.watch
    MongoClient.watch
    更改流操作
    MongoClient.listDatabases
    Database.listCollections
    Collection.listIndexes
    枚举操作
    GridFS操作由Collection.find
    例如GridFSBucket.openDownloadStream)支持
    GridFS文件下载操作

    MongoDB驱动程序可能包括对其他操作的可重试支持,比如帮助方法或包装可重试读操作的方法。根据驱动程序文档 确定方法是否显式支持可重试读取。

    也可以看看:

    可重试读规范:支持的读取操作.

    不支持的读取操作

    以下操作不支持可重试的读取:

    MongoDB可重试读取只做一次重试尝试。这有助于解决暂时的网络错误或复制集选举,但不能解决持久的网络错误。

    故障转移期间

    在重试读取操作之前,驱动程序使用read命令的原始读取首选项执行服务器选择。如果驱动程序不能选择使用原始读取首选项进行重试的服务器,则驱动程序返回原始错误。

    驱动程序在执行服务器选择之前等待serverSelectionTimeoutMS毫秒。可重试读取不会处理在等待serverSelectionTimeoutMS后不存在合格服务器的实例。

    译者:杨帅

    校对:杨帅

    参见

    原文 - Retryable Reads