是否可以使用16GB RAM在mongodb上运行200GB数据查询?

时间:2015-10-10 11:14:04

标签: mongodb database-performance

我正在尝试运行一个简单的查询,使用以下命令查找具有特定值的所有记录的数量:

  

db.ColName.find({id_c:1201})。COUNT()

我有200GB的数据。当我运行此查询时,mongodb占用了所有RAM,我的系统开始滞后。经过一个小时徒劳的等待,我放弃了,没有得到任何结果。

这里有什么问题,我该如何解决?

2 个答案:

答案 0 :(得分:2)

我认为 NoSQL 世界中的正确方法并不是试图执行这样的完整查询,而是在超时累积统计数据。

例如,您应该拥有一个包含任意对象的 stats 集合,这些对象应该拥有 id 属性,该属性可以取值"totalUserCount"。每当您添加用户时,您也会更新此计数。

这样您就可以获得即时结果。它只是在一小部分统计数据中得到一个属性值。

顺便说一句,这种缓慢应该是通过集合中非索引属性查询对象来实现的。 Try to index id_c and probably you'll get quicker results.

答案 1 :(得分:0)

使用给定的硬件规范,MySQL,MSSQL或Oracle可以轻松管理大量数据。你不需要NoSQL数据库,NoSQL数据库是为了更大的存储需求而制造的,这实际上需要大量硬件(RAM,硬盘)才能有效。

您需要定义一个索引来读取该ID并使用普通的SQL数据库。