gpt4 book ai didi

node.js - MongoDB中的changeStream和tailable游标有什么区别

转载 作者:IT老高 更新时间:2023-10-28 13:33:40 35 4
gpt4 key购买 nike

我正在尝试确定变更流之间的区别: 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();
});

和一个可尾光标: 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

他们有不同的用例吗?什么时候最好使用一个而不是另一个?

最佳答案

Change Streams (在 MongoDB v3.6+ 中可用)是一项功能,允许您访问实时数据更改,而不会出现拖尾 oplog 的复杂性和风险。 .变更流超过跟踪 oplog 的主要好处是:

  1. 利用内置的MongoDB Role-Based Access Control .应用程序只能针对它们具有 read 访问权限的集合打开更改流。细化和特定的授权。

  2. 提供定义明确且可靠的 API。 change events变更流返回的输出有据可查。此外,所有 official MongoDB drivers跟随相同specifications在实现变更流接口(interface)时。

  3. 作为变更流的一部分返回的变更事件至少会提交给大部分副本集。这意味着发送到客户端的更改事件是持久的。应用程序不需要在发生故障转移时处理数据回滚。

  4. 利用全局逻辑时钟提供跨分片更改的总排序。 MongoDB 保证保留更改的顺序,并且可以按照接收到的顺序安全地解释更改事件。例如,针对 3 分片分片集群打开的更改流游标会返回符合所有三个分片中这些更改的总顺序的更改事件。

  5. 由于排序特性,变更流本质上也是可恢复的。 change event output_id是一个简历 token 。 MongoDB官方驱动会自动缓存这个resume token,在网络 transient 错误的情况下驱动会重试一次。此外,应用程序还可以通过使用参数 resume_after 手动恢复。另见 Resume a Change Stream .

  6. 使用 MongoDB aggregation pipeline .应用程序可以修改更改事件输出。目前有五个管道阶段可用于修改事件输出。例如,更改事件输出可以在使用 $match stage 发送出去之前被过滤掉(服务器端)。 .见 Modify Change Stream Output了解更多信息。

when would it be good to use one over the other?

如果您的 MongoDB 部署是 3.6+ 版本,我建议使用 MongoDB Change Streams 而不是跟踪 oplog。

您还可以找到 Change Streams Production Recommendations有用的资源。

关于node.js - MongoDB中的changeStream和tailable游标有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343303/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com