提高性能mongdb

时间:2018-06-17 18:58:01

标签: python-3.x mongodb performance

有什么方法可以提高我的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秒。

0 个答案:

没有答案