MongoDB 无法在 100 万个文档中找到 ()

MongoDB can not find() in 1 million documents

我刚开始处理 MongoDB。 创建了 1 万份 json 份文件。我搜索:

db.mycollection.find({"somenode1.somenode2.somenode3.somenode4.Value", "9999"}).count()

它给出了正确的结果。工作时间:34 毫秒。一切正常。

现在创建一个包含 100 万个相同文档的数据库。数据库的总大小为34Gb.The MongoDB 将数据库按2Gb 划分为文件。我重复上述查询以查找相关文档的数量。我等了大约2个小时的结果。内存被占用(16GB)。最后我关闭了Mongo。 系统:Windows 7 x64,16Gb RAM。

请告诉我我做错了什么。生产数据库会更大。

在您的具体情况下,您似乎只是没有足够的 RAM。至少,"somenode4" 上的索引会提高查询性能。请记住,索引也将希望位于 RAM 中,因此无论如何您可能需要更多 RAM。你在虚拟机上吗?如果是这样;我建议您增加机器的大小以适应工作集的大小。

正如其他评论者之一所说,嵌套有点难看,但我知道这是你遇到的问题。因此,除了 RAM,索引似乎是您最好的选择。

作为索引工作的一部分,您可能还想尝试对索引进行预热,以确保它们在 find 和 count() 之前位于 RAM 中。尝试执行一个查询来寻找不存在的东西。这应该在该查询之前强制索引和数据进入 RAM。根据您的数据更改频率,您可能希望每天执行一次或更多次。您实际上是在预先加载缓慢的操作。