mongodb用于ram的内存

时间:2013-01-06 16:11:16

标签: mongodb ram bigdata

我的mongodb中有大量数据。它充满了推文(50 GB),我的Ram是8 GB。当查询它检索所有推文时,mongodb开始填充ram,当它达到8 GB时,它开始将文件移动到磁盘。这是它变得非常慢的部分。所以我改变了查询从跳过并开始使用索引。现在我有索引,我只查询8GB到我的程序,保存文件中使用的最后一条推文的ID,程序停止。然后重新启动程序,它从文件中获取推文的ID。但是mogod服务器仍然在使用第一个8GB的ram,不再使用,因为我有一个索引到最后一个。如何在不重新启动的情况下清理mongo数据库服务器的内存?

(在胜利中运行)

1 个答案:

答案 0 :(得分:0)

我对你的逻辑感到有点困惑。

  

所以我改变了跳过并开始使用索引的查询。现在我有索引,我只查询8GB到我的程序,保存文件中使用的最后一条推文的ID,程序停止。

使用范围查询无助于您必须分页的数据量(事实上它可能因索引而恶化),它只是通过使用索引进行大量跳过(如42K +行)使查询更快地服务器端跳跃)。如果你和那个skip()相同但是在索引中(没有覆盖索引)那么你仍然在完全相同的分页。

由于内存映射和您的工作集,它很慢。你有比RAM更多的数据,不仅如此,你使用的数据多于RAM,因为你可能一直都是页面错误。

重新启动程序无法解决此问题,也不会因查询而清除其数据操作系统(使用重启或特定命令)。您可能需要:

  • 考虑一下您的查询,以便您的工作集更符合您的记忆
  • 或者在多台服务器上对数据进行分片,这样您就不必构建主服务器
  • 或者获得更大的主服务器(moar RAM !!!!!)

修改

由于MongoDB使用完全分配的批次,你的操作系统的LRU应该已经交换旧数据,这意味着如果不交换8GB,那是因为你的工作集占用了8GB(最有可能是一些)交换结束)。