Python MongoDB与大数据
我有一个很大的数据库,其中一个集合有近5亿个文档,如下所示:Python MongoDB与大数据,python,mongodb,optimization,bigdata,Python,Mongodb,Optimization,Bigdata,我有一个很大的数据库,其中一个集合有近5亿个文档,如下所示: {'WP43234' : '12312312'} 第一个是登入,第二个是ID——基本上它是两个数据集之间链接的集合。问题是,许多访问都指向同一个ID,这使得它非常庞大。我在第一个字段上有一个索引,它加快了查找过程,但每个记录大约2分钟的速度仍然太慢: [ { "v" : 2, "key" : { "_id" : 1 }, "name" :
{'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编写的应用程序中加速以下过程:
用户上传的文件的访问蛋白质ID说高达100k
查找登录和相关ID最耗时的部分
从第二次收集中获取数据小,工作速度快,无需对其进行任何处理
就我个人而言,我认为这些措施应该奏效:
将数据库放在SSD上而不是硬盘上
更强大的CPU
多处理-并行请求数据线程可能更好?
但是,我不确定速度是否会显著加快,足以处理大量用户请求。还有什么可以做的吗?我正在考虑切换到SQL,但MongoDB的性能似乎更好。您应该为您的收藏使用不同的结构:按taxonId对登录进行分组,如下所示:
{
_id: taxonID,
acc: [ "WP43234",
"WP43234.1",
"WP43234.2"
]
}
然后在acc字段上创建索引。
在考虑升级硬件之前,请确保您的查询已优化。查看解释,确保正确使用索引IXSCAN而不是COLLSCAN。
使用mongodb 3.4,wiredTiger引擎和快速压缩我将试用它并报告结果。谢谢请注意:我使用的不是版本,而是附件。数据集很大,因为我有来自不同数据库的acc映射到NCBI税务id。