我想实时更新Node中MongoDB数据库的变化.js.
单个MongoDB变更流几乎立即发送更新通知.但当我打开多个(10+)流时,在数据库写入和通知到达之间会有巨大的延迟(最多几分钟).
这就是我建立变革流的方式:
let cursor = collection.watch([
{$match: {"fullDocument.room": roomId}},
]);
cursor.stream().on("data", doc => {...});
我try 了另一种方法来设置一条流,但速度同样慢:
let cursor = collection.aggregate([
{$changeStream: {}},
{$match: {"fullDocument.room": roomId}},
]);
cursor.forEach(doc => {...});
在收集性能数据的同时,一个自动化的过程将微小的文档插入到集合中.
其他一些细节:
- 开放流游标计数:50
- 写入速度:
insertMany
个文档/秒(10批使用insertMany
) - 运行时间:100秒
- 平均延迟:7.1秒
- 最大延迟:205秒(not a typo, over three minutes)
- MongoDB版本:3.6.2
- 集群设置#1:MongoDB Atlas M10(3个副本集)
- 集群设置#2:DigitalOcean Ubuntu box+Docker中的单实例mongo集群
- node .js CPU使用率:<;1%
两种设置产生相同的问题.这到底是怎么回事?