首页 > 解决方案 > 提高性能 mongdb

问题描述

有什么办法可以提高我的 mongodb 查询的性能?

我有一个包含大约 60.000 个文档的数据库,它会变得更大,所以我需要开始关注性能。

我有一个 ID 的列表,我正在循环查找正确的文档,然后按员工数量进行过滤。ID 列表是由另一个集合中的另一个查询生成的。

id_list = ['12412412', '42141241', '41241241', etc...]

for i in id_list:
    keyword = '{}.employees'.format(i)
    query = db.collection.find_one({keyword: {'$gt': 2}}, {'_id': False})
    result.append(query)

运行这样的查询大约需要 27 秒。

集合的结构如下所示。

{
'412412421': {
    'name':'company name',
    'employees': 3,
    etc...
    }, 
'512457300': {
    'name':'company name',
    'employees': 27,
    etc...
    } ...
} 

该查询现在在具有机械硬盘驱动器 7200 rpm 的开发服务器上运行。我认为它在 ssd 磁盘上会更快,但肯定有可能提高它的性能吗?

有没有更好的方法来运行查询而不是像这样的循环?


我设法优化了查询,如果其他人可能会觉得它有用,则可以解决这个问题。我像这样更改了集合的结构:

{
    {
    'name':'company name',
    'id': '412412421',
    'employees': 3,
    etc...
    }, 
    {
    'name':'company name',
    'id': '512457300',
    'employees': 27,
    etc...
    } ...
}

然后我为 id 添加了索引:

db.collection.create_index([('id', pymongo.DESCENDING)])

最后我将查询更改为 find 而不是 find_one

query = db.collection.find({'id':{'$in':id_list }, 'employees': {'$gt': 2}}, {'_id': False})

for q in query:
    result.append(q)

现在运行这个需要 0.3 秒。

标签: python-3.xmongodbperformance

解决方案


推荐阅读