python-3.x - 提高性能 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 秒。
解决方案
推荐阅读
- laravel - Vue js选择框给出了几个错误
- ios - URL Scheme 有时会在应用后启动 App Store
- javascript - 视差效应 - Firefox 性能不佳
- arrays - Mongoose 实例未保存到数据库,未显示错误
- regex - 如何在一个竖线“|”之间移动长度可变的列 和 ”[”?
- drupal - Drupal 8 Jsonapi Get 请求抛出错误请求错误
- python - 将 CLOB 插入从另一个数据库中选择的数据库
- android - 我收到此错误:MenuPopupHelper 不能在没有锚的情况下使用
- python - 发出帖子请求之前的随机数更改
- java - 列表方法(如 remove、contains、removeAll)具有 Object 类型参数而不是泛型
类型