我正在尝试使用 node.js 驱动程序查看 MongoDB oplog,理论上它是有效的,但它的启动时间相当长,因为它似乎正在扫描整个集合。我在 MongoDB 文档中找到了这个:
- 由于可尾游标不使用索引,因此查询的初始扫描可能会很昂贵;但是,在最初耗尽光标之后,后续对新添加的文档的检索是廉价的。
有没有办法快速“耗尽”光标以开始拖尾?在我看来,Meteor 的人已经解决了这个问题,但我很难通过阅读他们的代码来理解其中的区别。这就是我目前所拥有的:
var cursorOptions = {
tailable: true,
awaitdata: true,
numberOfRetries: -1
};
var oplogStream = oplogDb.collection('oplog.rs').find(
{
ns: { $regex : /^dbname\./ },
op: "i",
ts: { $gt: lastEntry.ts }
},
cursorOptions
).sort({$natural: -1}).stream();
oplogStream.on('data', publishDocument);
oplogStream.on('end', function() {
log.error("received unexpected end event from oplog watcher.");
});
太好了,提问后 5 分钟我就找到了答案。我会将其发布在这里以供将来参考:
你必须添加oplogReplay
标志并将其设置为true
. This 仅有效如果您还对ts
场地。我之前在没有设置范围的情况下尝试过这个,但它什么也没做。当您添加下面突出显示的这一行时,上面的代码将起作用:
var cursorOptions = {
tailable: true,
awaitdata: true,
oplogReplay: true, // add this line
numberOfRetries: -1
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)