我有一个大型数据库,其中一个集合包含近5亿个文档,如下所示:
{'WP43234' : '12312312'}
第一个是加入,第二个是ID - 基本上它是两个数据集之间的链接集合。问题是许多加入指向相同的ID,这使得它很大。我在第一个字段上有一个索引,它加快了查找过程,但它仍然太慢(每条记录大约2分钟):
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "TaxIDMapper.links"
},
{
"v" : 2,
"unique" : true,
"key" : {
"ProteinID" : 1
},
"name" : "ProteinID_1",
"ns" : "TaxIDMapper.links"
}
]
主要目的是加快我的应用程序中的程序(用python编写):
我个人认为这些应该有效:
但是我不确定加速是否足以处理大量用户请求。还有什么可以做的吗?我在考虑切换到SQL,但似乎MongoDB表现更好。
答案 0 :(得分:1)
您应该为您的收藏品使用不同的结构:通过taxonId对加入进行分组:
{
_id: taxonID,
acc: [ "WP43234",
"WP43234.1",
"WP43234.2"
]
}
然后在acc
字段上创建索引。
在考虑升级硬件之前,请确保您的查询已经过优化。查看explain()
并确保正确使用索引(IXSCAN
而非COLLSCAN
)。
使用mongodb 3.4, wiredTiger 引擎进行快速压缩