小编Den*_*kov的帖子

为什么在 MongoDB 中找不到文档,但读取重试有帮助?

有时我们会观察到下一种情况:

  • 我们w: 1通过mongos写入分片primaryA 副本的路由器向 MongoDB 插入一个带有写入问题的文档。
  • 我们local通过mongos应该从分片primaryA 的副本读取的路由器使用默认读取关注从 MongoDB 读取此文档。
  • 这就像未找到文档一样findOne返回null
  • (实际上它是 Python 驱动程序pymongo - find_one(),它返回None)。
  • 我们休眠 0.1 秒并重试读取。
  • 在步骤 2-5 中,文档最终被成功读取。

我们发现:

  • 当大量文档快速插入到此集合中时,会更频繁地观察到这种情况。
  • 我们怀疑这样​​的插入会导致块从分片 A 到分片 B 的分块和迁移。
  • 文档在迁移时,是否会在短时间内无法读取?
  • 但是只有一个插入到只有一个分片db.oplog.rs,没有fromMigrate标志。

为什么会发生?如何正确处理?

这些误报“未找到”-s 可能会导致错误的原子查找或创建通过$setOnInsert?

sharding database-migration mongodb database-replication pymongo

5
推荐指数
0
解决办法
394
查看次数