gpt4 book ai didi

java - MongoDB 使用大量内存

转载 作者:可可西里 更新时间:2023-11-01 10:33:59 25 4
gpt4 key购买 nike

我正在尝试将 mysql 表迁移到 mongodb。我的表有 600 万个条目。我将 java 与吗啡一起使用。当我节省大约 120 万时,我的内存几乎全部消耗。

我读过 mongo 将数据存储在内存中,然后保存在磁盘中。是否可以发送类似提交的内容来释放一些内存?

最佳答案

1)在持久性方面,你可以告诉MongoDB java驱动(Morphia正在使用哪个),使用哪个策略,见https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/mongodb/WriteConcern.java#L53 .这只是速度之间的权衡:NONE(即使连接问题也不会导致错误)到 FSYNC_SAFE(数据肯定会写入磁盘)。有关内部详细信息,请查看 http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/

2) 您的整个数据都映射到内存(这就是为什么 32 位版本的大小限制为 2GB),但它仅在需要时才实际加载。 MongoDB 通过使用 mmap 将其留给操作系统。因此,只要有更多的 RAM 可用,MongoDB 就会很乐意将它需要的所有数据加载到 RAM 中,以便非常快速地进行查询。如果没有更多可用内存,则由操作系统换出旧内容。这有一个很好的效果,即使您重新启动 MongoDB 进程,您的数据也会保留在内存中;仅当您重新启动服务器本身时,才必须再次从磁盘中获取数据。我认为不利之处在于,与操作系统相比,数据库进程可能对应该首先换出的内容有更好的理解。我没有在 Windows 上使用 MongoDB,也没有在 Mac 或 Linux 上看到该消息(还),但操作系统应该为您处理该消息(并根据需要自动交换信息)。您是否尝试过将驱动程序设置为 JOURNAL_SAFE(应该是数据安全性和速度之间的良好折衷)?在这种情况下,即使 MongoDB 进程终止,也不应丢失任何数据。

3) 一般来说,MongoDB 被构建为使用尽可能多的可用内存,但您可以使用 http://captaincodeman.com/2011/02/27/limit-mongodb-memory-use-windows/ 来限制它。 - 我还没有测试过,因为我们使用的是(虚拟)Linux 服务器。

关于java - MongoDB 使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com