Mongodb Mongo Oplog可裁剪光标

Mongodb Mongo Oplog可裁剪光标,mongodb,mongo-java-driver,Mongodb,Mongo Java Driver,我们使用mongo java驱动程序3.2.2和mongo oplog集合来识别mongo集合中的更改(mongo服务器版本为3.2)。我们遇到了以下两个问题,对此没有什么问题。如果你们中的任何人遇到了相同的问题,请帮助我们澄清这些问题。以下问题会发生,尤其是当oplog中有大量写操作时 代码: MongoCursor<Document> tailableCursor = collection.find(query).sort(new Document("$natural", 1))

我们使用mongo java驱动程序3.2.2和mongo oplog集合来识别mongo集合中的更改(mongo服务器版本为3.2)。我们遇到了以下两个问题,对此没有什么问题。如果你们中的任何人遇到了相同的问题,请帮助我们澄清这些问题。以下问题会发生,尤其是当oplog中有大量写操作时

代码:

MongoCursor<Document> tailableCursor = collection.find(query).sort(new Document("$natural", 1)).cursorType(CursorType.TailableAwait).noCursorTimeout(true).iterator();
MongoCursor tailableCursor=collection.find(query).sort(新文档($natural),1)).cursorType(cursorType.TailableAwait).noCursorTimeout(true.iterator();
  • com.mongodb.MongoExecutionTimeoutException:操作超出时间限制

    a、 )设置maxTime是否有助于更好地处理异常??如果我们使用的是可裁剪的等待光标,那么maxTime的实际价值是什么?下面的链接表明,对于游标,后续的“getmore”请求将包含在总时间中。

    b、 )使用非阻塞游标会调用帮助吗

    c、 )在出现上述异常的情况下,什么是优雅地处理错误并继续处理后续记录的最佳方法

  • com.mongodb.MongoQueryException:查询失败,错误代码为96,错误消息为“查找命令期间执行器错误:CappedPositionLost:Collections可能因删除capped collection中的位置而死亡”

    增加Oplog大小是否有助于解决此问题?是否有其他替代解决方案


  • 我们长期以来一直面临类似的问题。经过一些研究,我们发现这份官方文件非常有用

    我们的问题是“复制滞后”

    复制延迟是主操作上的操作与将该操作从oplog应用到辅助操作之间的延迟。复制延迟可能是一个重要问题,并可能严重影响MongoDB副本集部署。过度的复制延迟使“滞后”成员无法快速成为主成员,并增加了分布式读取操作不一致的可能性

    复制滞后的可能原因包括:

    • 网络延迟
    • 磁盘吞吐量
    • 并发性
    在某些情况下,主设备上的长时间运行操作可能会阻止辅助设备上的复制。为了获得最佳结果,请将写关注点配置为要求确认复制到辅助设备。如果复制无法跟上写入负载,这将防止写入操作返回

    • 适当的书面关注
    如果执行大数据摄取或大容量加载操作时需要对主设备进行大量写入,特别是在未确认写入的情况下,则辅助设备将无法足够快地读取oplog以跟上更改。 为了防止这种情况发生,请在每100、1000或其他时间间隔后请求写确认写关注点,以便二级供应商有机会赶上一级供应商

    我们遵循“复制滞后的可能原因包括”一节,做了两件事:

    • 使用适当的写关注点重写插入代码
    • 极限插入速率
    然后我们的问题就解决了