首页 > 解决方案 > MongoDB ChangeStream 导致副本集成员内存不足

问题描述

我们有 1 个副本集的 3 个成员,我们正在使用 node.js 驱动程序和一个像这样实现的 wathcer:

const offerTreeTask = me.mdb.collection('offer_tree');
const offerTreeChangeStream = offerTreeTask.watch([]);
offerTreeChangeStream.on('change', (change) => 
{
     me.shouldLoadTree = true;
});

一个简单直接的实现,有 20 个客户端创建了这个观察者。一段时间后发生的情况是副本中的主节点内存不足,无论我们增加多少该机器上的内存,它都会发生。

如果我们删除观察者,那么一切都运行良好。

数据库本身大小为 3GB

我们尝试了 3 种不同的实现,第一个在更改时返回文档(fullDocument),这导致在 8GB 机器上一天内存不足,第二个我们将实现更改为仅通知更改,然后在 2 天后用完,第三个我们试图关闭连接并每 5 分钟重新连接一次,这是最糟糕的,因为它会在半天后用完。

标签: node.jsmongodb

解决方案


推荐阅读