首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >changeStream和MongoDB中的可裁剪游标的区别是什么?

changeStream和MongoDB中的可裁剪游标的区别是什么?
EN

Stack Overflow用户
提问于 2018-03-18 00:23:51
回答 2查看 3.1K关注 0票数 10

我正在试图确定变更:https://docs.mongodb.com/manual/changeStreams https://docs.mongodb.com/manual/reference/method/db.collection.watch/之间的区别。

看起来是这样的:

代码语言:javascript
复制
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/

看起来是这样的:

代码语言:javascript
复制
 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

他们有不同的用例吗?什么时候用一个比另一个好呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-18 11:03:29

变更流 (在MongoDB v3.6+中提供)是一项功能,允许您访问实时数据更改,而不需要跟踪oplog的复杂性和风险。改变流在尾随oplog上的主要好处是:

  1. 使用内置的基于MongoDB角色的访问控制。应用程序只能针对其读取访问权限的集合打开更改流。经过完善和具体的授权。
  2. 提供一个定义良好、可靠的API。变更流返回的变更事件输出有很好的文档记录。此外,在实现change streams接口时,所有官方MongoDB驱动程序都遵循相同的规格说明
  3. 作为更改流的一部分返回的更改事件至少被提交给大多数副本集。这意味着发送到客户端的更改事件是持久的。在发生故障转移时,应用程序不需要处理数据回滚。
  4. 通过使用全局逻辑时钟,提供跨碎片更改的总体顺序。MongoDB保证保持更改的顺序,并且可以安全地按照接收到的顺序解释更改事件。例如,针对3片切分的集群打开的更改流游标返回更改事件,这与所有三个碎片的更改的总顺序有关。
  5. 由于排序特性,变更流本身也是可恢复的。_id of 变更事件输出是一个简历标记。MongoDB官方驱动程序自动缓存此简历令牌,在发生网络瞬态错误时,驱动程序将重试一次。此外,应用程序还可以通过使用参数resume_after手动恢复。另见恢复更改流
  6. 利用MongoDB聚合流水线.应用程序可以修改更改事件输出。目前,有五个管道阶段可用于修改事件输出。例如,在使用$match阶段发送之前,可以筛选出更改事件输出(服务器端)。有关详细信息,请参阅修改变更流输出

什么时候用一个比另一个好呢?

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

您可能还会发现更改流生产建议是一个有用的资源。

票数 15
EN

Stack Overflow用户

发布于 2018-03-18 06:33:44

使用可裁剪的游标,可以跟踪对所有集合的所有更改。使用changeStream,您只会看到对所选集合的更改。更少的流量和更可靠的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49343303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档