我希望获得有关Node.js中MongoDB数据库更改的实时更新。
单个MongoDB更改流几乎立即发送更新通知。但是当我打开多个(10+)流时,数据库写入和通知到达之间会有大量延迟(最多几分钟)。
我是如何设置更改流的:
let cursor = collection.watch([
{$match: {"fullDocument.room": roomId}},
]);
cursor.stream().on("data", doc => {...});
我尝试了另一种设置流的方法,但它同样慢:
let cursor = collection.aggregate([
{$changeStream: {}},
{$match: {"fullDocument.room": roomId}},
]);
cursor.forEach(doc => {...});
自动化流程在收集性能数据时将微小文档插入到集合中。
其他一些细节:
insertMany
的10个批次)两种设置都会产生同样的问题。可能会发生什么?
答案 0 :(得分:25)
MongoDB的Node.js客户端中的default connection pool size为5.由于每个更改流游标都会打开一个新连接,因此连接池必须至少与数量一样大游标。
const mongoConnection = await MongoClient.connect(URL, {poolSize: 100});
(感谢MongoDB Inc.调查this issue。)