首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地关闭MongoDB changeStream?

如何有效地关闭MongoDB changeStream?
EN

Stack Overflow用户
提问于 2018-12-11 17:50:37
回答 1查看 2.3K关注 0票数 3

我一直在用MongoDB changeStreams和Node.js和socket.io;

我使用的是一种pub-sub架构,对于每一个订阅,他都应该用新的订阅替换以前的changeStream。

逻辑是这样的:

  1. 客户端请求新订阅(它与集合changeStream相关)
  2. 如果客户端有一个changeStream,服务器将关闭该changeStream并替换为更新的changeStream。

pseudoCode订阅

代码语言:javascript
复制
// If it has a changeStream
if (socket.dbWatcher["users"]) {
  // close changeStream
  socket.dbWatcher["users"].removeAllListeners("change");
  socket.dbWatcher["users"].close();
}

// Replace with new changeStream and pipeline
socket.dbWatcher["users"] = db.collection("users").watch(pipeline, {resumeAfter})
.on("change", (change) => {
  socket.emit("users", change)
})

事情变慢了,所以我检查了连接的数量,并且远远超过了集合的数量(16个集合和29个连接)。

一旦套接字断开,我就关闭所有的changeStreams,但是连接仍然存在(数据库)。我增加了poolSize,但是有29个连接是不正常的。

这是我用来检查连接的mongodb命令:db.serverStatus().connections

EN

回答 1

Stack Overflow用户

发布于 2019-08-01 21:36:15

您可以在这里看到关闭changestream的文档:https://docs.mongodb.com/manual/changeStreams/#resume-a-change-stream

正如您在节点驱动程序API中所看到的,在changestream上有一个close()方法。

但是,我不太确定用MongoDB changestreams快速关闭/重新打开连接是否会有效果。最好只是观察整个用户集合。

所设计的变更功能并不真正适用于传统的公共模式。有关详细信息,请参阅此问题:严重性能下降与MongoDB更改流

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

https://stackoverflow.com/questions/53729702

复制
相关文章

相似问题

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