【发布时间】:2017-07-17 05:53:17
【问题描述】:
我们正在使用 mongo java 驱动程序 3.2.2 和 mongo oplog 集合来识别我们的 mongo 集合中的变化(Mongo 服务器版本是 3.2)。我们遇到了以下 2 个问题,并且对此问题很少。如果你们中的任何人遇到过同样的问题,请帮助我们澄清它们。以下问题尤其是在 oplog 中有大量写入操作时会发生。
代码:
MongoCursor<Document> tailableCursor = collection.find(query).sort(new Document("$natural", 1)).cursorType(CursorType.TailableAwait).noCursorTimeout(true).iterator();
-
com.mongodb.MongoExecutionTimeoutException:操作超出时间限制
a.) 设置 maxTime 是否有助于更好地处理异常?考虑到我们正在使用可尾等待光标,maxTime 的实际价值是多少?下面的链接表明,对于游标,后续的“getmore”请求将包含在总时间中。 https://www.mongodb.com/blog/post/maxtimems-and-query-optimizer-introspection-in
b.) 使用非阻塞游标调用会有帮助吗? http://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/client/MongoCursor.html#tryNext--
c.) 如果出现上述异常,如何优雅地处理错误并继续处理后续记录?
-
com.mongodb.MongoQueryException: 查询失败,错误代码 96 和错误消息“查找命令期间的执行程序错误:CappedPositionLost:CollectionScan 因删除上限集合中的位置而死亡
增加 Oplog 大小是否有助于解决此问题?是否有其他可用的替代解决方案?
【问题讨论】: