mongodb有没有什么办法禁止读取数据的时候进行缓存

2020-12-09 16:05发布

我有时候需要大量的读取mongodb中的数据,这些数据并不是热数据,我只是读取一次然后就不会在用了,但是每当我执行读取操作的时候,mongodb占用的内存就会飙升,直到99%把所有内存都吃光,然后导致我的业务程序崩溃。。。太坑了,虽然我每次读取的数据量很大,但是这些数据不是热数据啊,我不需要mongodb把他们的索引甚至他们自己加载到内存中,有没有什么办法能禁止mongodb读取数据就缓存的问题

标签: mongodb
3条回答
放荡不羁爱自由
3楼-- · 2020-12-09 16:44

经过各种折腾,我发现一个新的骚操作,既能读取数据,又能不吃内存,那就是用FindOneAndDelete获取数据。。。。FindOneAndDelete顾名思义,就是查询一个数据并且从数据库中删除它。。。正常情况下是万万不能乱用这个函数的,但是因为我的需求是把大量数据按照顺序读出来用一下,然后就不用了,所以我可以用FindOneAndDelete拿数据,用完后,直接将内存中的数据写成文件扔到硬盘上,因为这完全是可控的,所以内存非常的稳定。这样既能解决我的内存飙升问题,还能有限的释放磁盘空间。
因为我怕条件筛选又会导致mongodb吃进大量的内存,所以我用FindOneAndDelete的时候没有直接传入条件,我是先用find查询一次时间范围找到我要的数据的最后一条,然后再循环调用FindOneAndDelete直到某个返回的数据和之前查询的最后一条数据一致,然后就结束,绕了这么大一个圈,终于是解决问题了。。。。

查看更多
小情绪 Triste *
4楼-- · 2020-12-09 16:46

mongodb会把磁盘文件的一部分或全部内容直接映射到内存,所以会导致内存一直占用很大,最好不要把应用
服务器和mongdb放在一个服务器,分开放

查看更多
登录 后发表回答