PyMongo 中 `ServerSelectionTimeoutError` 和 `NetworkTimeout` 异常的区别

ServerSelectionTimeoutError vs NetworkTimeout 的区别

1. ServerSelectionTimeoutError

  • 继承关系 : ServerSelectionTimeoutError -> AutoReconnect -> ConnectionFailure -> PyMongoError
  • 触发时机: 当 PyMongo 无法找到合适的服务器来执行操作时抛出
  • 超时配置 : 由 serverSelectionTimeoutMS 参数控制(默认 30 秒)
  • 具体场景 :
    • 无法连接到任何 MongoDB 服务器
    • 副本集没有主节点且在超时时间内未选出主节点
    • 尝试使用副本集无法满足的读取偏好进行查询
    • 所有可用服务器都不符合查询条件

2. NetworkTimeout

  • 继承关系 : NetworkTimeout -> AutoReconnect -> ConnectionFailure -> PyMongoError
  • 触发时机 : 当在已打开的连接上执行操作超过 socketTimeoutMS 时抛出
  • 超时配置 : 由 socketTimeoutMS 参数控制
  • 具体场景 :
    • 已经建立连接,但单个操作(如查询、插入、更新)执行时间过长
    • 网络延迟导致操作响应超时
    • 数据库服务器处理请求时间过长

3. 关键区别

方面 ServerSelectionTimeoutError NetworkTimeout
发生阶段 连接选择阶段 操作执行阶段
连接状态 尚未建立有效连接 连接已建立
配置参数 serverSelectionTimeoutMS socketTimeoutMS
默认超时 30 秒 无默认值(需要显式设置)
池连接影响 不影响连接池 池中其他连接保持开放
操作状态 操作未开始执行 操作可能已部分执行

4. 实际应用场景示例

python 复制代码
# ServerSelectionTimeoutError 示例场景:
# - MongoDB 服务器全部宕机
# - 网络分区导致无法访问任何服务器
# - 副本集配置错误
# - 读取偏好配置错误(如要求从不存在的辅助节点读取)

# NetworkTimeout 示例场景:
# - 大型聚合查询执行时间过长
# - 网络拥塞导致响应延迟
# - 数据库服务器负载过高响应缓慢
# - 执行复杂的索引操作
相关推荐
AI全栈实验室5 天前
MongoDB迁移金仓踩了5个坑,最后一个差点回滚
mongodb
数据知道6 天前
MongoDB 元素查询运算符:使用 `$exists` 检查字段是否存在及处理缺失字段
数据库·mongodb
数据知道6 天前
MongoDB 批量写操作:`bulkWrite()` 在数据迁移与清洗中的高性能应用
数据库·mongodb
数据知道6 天前
MongoDB 数组更新操作符:`$push`、`$pull`、`$addToSet` 管理列表数据
数据库·mongodb
数据知道6 天前
MongoDB 更新操作符 `$set` 与 `$unset`:精准修改字段与删除字段
数据库·mongodb
数据知道6 天前
MongoDB 数值更新原子操作:`$inc` 实现点赞、计数器等高并发原子操作
数据库·算法·mongodb
数据知道6 天前
MongoDB 数组查询专项:`$all`、`$elemMatch` 与精确匹配数组的使用场景
数据库·mongodb
数据知道7 天前
MongoDB 正则表达式查询:在 MongoDB 中实现模糊搜索与索引优化陷阱
数据库·mongodb·正则表达式
正在走向自律7 天前
文档数据库替换新范式:金仓数据库MongoDB兼容性深度解析与实践指南
数据库·mongodb·国产数据库·金仓数据库
I'mAlex7 天前
金仓数据库平替MongoDB实操解析:多模融合赋能企业文档数据管理国产化升级
数据库·mongodb·kingbasees·金仓数据库