Ale*_*lls 5 mongoose mongodb node.js mongodb-query
我试图确定变更流之间的区别是什么:https : //docs.mongodb.com/manual/changeStreams https://docs.mongodb.com/manual/reference/method/db.collection.watch/
看起来像这样:
const changeStream = collection.watch();
changeStream.next(function(err, next) {
expect(err).to.equal(null);
client.close();
done();
});
Run Code Online (Sandbox Code Playgroud)
和可拖尾的光标:https://docs.mongodb.com/manual/core/tailable-cursors/
看起来像这样:
const cursor = coll.find(self.query || query)
.addCursorFlag('tailable', true)
.addCursorFlag('awaitData', true) // true or false?
.addCursorFlag('noCursorTimeout', true)
.addCursorFlag('oplogReplay', true)
.setCursorOption('numberOfRetries', Number.MAX_VALUE)
.setCursorOption('tailableRetryInterval', 200);
const strm = cursor.stream(); // Node.js transform stream
Run Code Online (Sandbox Code Playgroud)
他们有不同的用例吗?什么时候在另一个上使用会比较好?
变更流(在MongoDB v3.6 +中可用)是一项功能,使您可以访问实时数据变更,而不会带来复杂性和拖尾oplog的风险。与尾随操作日志相比,变更流的主要好处是:
利用内置的MongoDB基于角色的访问控制。应用程序只能针对具有读取权限的集合打开更改流。精致而具体的授权。
提供定义良好的可靠API。变更流返回的变更事件输出已得到充分记录。同样,在实施变更流接口时,所有正式的MongoDB官方驱动程序都遵循相同的规范。
作为更改流的一部分返回的更改事件至少会提交给大多数副本集。这意味着发送到客户端的更改事件是持久的。故障转移时,应用程序无需处理数据回滚。
通过使用全局逻辑时钟,提供各个分片上的更改总顺序。MongoDB确保更改的顺序得以保留,并且更改事件可以按照接收到的顺序安全地解释。例如,针对3个分片集群打开的更改流游标会返回更改事件,该事件遵循所有三个分片中这些更改的总顺序。
由于排序特性,更改流也固有地是可恢复的。该_id的变化事件输出为令牌的简历。MongoDB官方驱动程序会自动缓存此恢复令牌,如果出现网络瞬态错误,驱动程序将重试一次。另外,应用程序还可以通过使用parameter手动恢复resume_after。另请参阅恢复变更流。
利用MongoDB聚合管道。应用程序可以修改更改事件输出。当前有五个管道阶段可用于修改事件输出。例如,更改事件输出可以在过滤之前(服务器端)使用$ match stage发送出去。有关更多信息,请参见修改更改流输出。
什么时候在另一个上使用会比较好?
如果您的MongoDB部署版本为3.6+,则建议在操作日志后面附加MongoDB更改流。
您可能还会发现“ 更改流生产建议”是有用的资源。
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |