我刚刚开始处理MongoDB。 创建了1万个json文档。我搜索:
db.mycollection.find({"somenode1.somenode2.somenode3.somenode4.Value", "9999"}).count()
它给出了正确的结果。工作时间:34毫秒。一切都很好。
现在创建一个包含100万个相同文档的数据库。数据库的总大小为34Gb.MongoDB将数据库按2Gb划分为文件。我重复上述查询以查找相关文档的数量。我等了大约2个小时的结果。内存占用(16GB)。最后我关闭了Mongo。 系统:Windows 7 x64,16Gb RAM。
请告诉我我做错了什么。生产数据库会更大。
答案 0 :(得分:1)
在您的特定情况下,您似乎没有足够的RAM。至少和#34; somenode4"上的索引;会提高查询性能。请记住,索引也想要在RAM中,所以无论如何你可能需要更多的RAM。你在虚拟机上吗?如果是这样;我建议您增加机器的尺寸以考虑工作集的大小。
正如其他评论者所说,嵌套有点难看但我明白这就是你的处理方式。所以除了RAM之外,索引似乎是你最好的选择。
作为索引工作的一部分,您可能还想尝试预热索引以确保它们在查找和count()之前位于RAM中。尝试执行查找不存在的查询。这应该在该查询之前强制索引和数据进入RAM。等待数据更改的频率,您可能希望每天或更长时间执行此操作。您基本上是在加载慢速操作。