我看起来像这样的文件:mongodb使用什么索引?
{
{
"_id": ObjectId("5444fc67931f8b040eeca671"),
"meta": {
"SessionID": "45",
"configVersion": "1",
"DeviceID": "55",
"parentObjectID": "55",
"nodeClass": "79",
"dnProperty": "16"
},
"cfg": {
"Name": "test"
}
}
的名称和数据只是为了测试个大气压。但我在数据库中共有2500万个文件。我在这个find()中使用find()来获取特定的文档。在这种情况下,我使用四个参数,dnProperty,nodeClass,DeviceID和configVersion,它们都不是唯一的。
Atm。我的索引设置很简单:
ensureIndex([["nodeClass", 1],["DeviceID", 1],["configVersion", 1], ["dnProperty",1]])
换句话说我有四个参数的索引。如果您执行的搜索没有找到任何文档,我仍然遇到很多问题。在我的例子中,所有的“数据”在1-100之间是随机的,所以如果我使用其中一个值大于100的find(),则需要30-180秒的任何时间来执行搜索,它也使用我所有的8GB RAM,那么由于没有RAM,计算机变得非常慢。
什么是更好的索引?我使用索引是否正确?我是否只需要更多的内存,因为它会将数据库的“全部”放入其工作内存中?你会推荐另一个数据库(mongo除外)来处理这个更好吗?
对不起,有很多问题我希望它们足够短,你可以给我一个答案。
您能向我们展示您的慢查询吗? – joao 2014-10-22 07:45:37
2500万个文件很多。你可以考虑这些事情:使用多个集合来分割数据;使用数据集(如google bigquery)其快速和类似于SQL。 – 2014-10-22 07:46:10