MongoDB和大数据

时间:2017-03-30 11:03:47

标签: python mongodb optimization bigdata

我有一个大型数据库,其中一个集合包含近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编写):

  1. 用户上传带有种质(蛋白质ID)(最多100k)的文件
  2. 查找加入项和相关ID(最耗时的部分)
  3. 从第二个集合中获取数据(小,快速,无需任何操作)
  4. 我个人认为这些应该有效:

    • SSD上的数据库而不是HDD
    • 更强大的CPU
    • 多处理 - 并行请求数据(也许线程更好?)

    但是我不确定加速是否足以处理大量用户请求。还有什么可以做的吗?我在考虑切换到SQL,但似乎MongoDB表现更好。

1 个答案:

答案 0 :(得分:1)

您应该为您的收藏品使用不同的结构:通过taxonId对加入进行分组:

{ 
  _id: taxonID, 
  acc: [ "WP43234", 
         "WP43234.1",
         "WP43234.2"
       ]
}

然后在acc字段上创建索引。 在考虑升级硬件之前,请确保您的查询已经过优化。查看explain()并确保正确使用索引(IXSCAN而非COLLSCAN)。 使用mongodb 3.4, wiredTiger 引擎进行快速压缩