当我使用jupyter从mongodb导入数据时,在导入过程中,我的内存为35%,但我的cpu在100%到135%之间。导入数据需要很长时间。但我不确定在这种情况下瓶颈在哪里。我的代码在
之下所以根据SO中的其他用户,这已经被编入索引。我还能做些什么来加快将数据导入我的电脑的过程?
{
"_id" : ObjectId("5ad0ade0bef1fc2fba99489d"),
"property_a" : 0.0,
"property_b" : 0.0,
"property_c" : 0.0,
"property_d" : 0.0,
"property_e" : 0.0,
.....
}
我用来导入数据的代码如下,我通过jupyter笔记本执行它。请注意编辑应该是在juypter笔记本还是在mongodb上,在我的情况下我使用的是robo3t。
import pandas as pd
from pymongo import MongoClient
def _connect_mongo(host, port, username, password, db):
""" A util for making a connection to mongo """
if username and password:
mongo_uri = 'mongodb://%s:%s@%s:%s/%s' % (username, password, host, port, db)
conn = MongoClient(mongo_uri)
else:
conn = MongoClient(host, port)
return conn[db]
def read_mongo(db, collection, query={}, host='localhost', port=27017, username=None, password=None, no_id=True):
""" Read from Mongo and Store into DataFrame """
# Connect to MongoDB
db = _connect_mongo(host=host, port=port, username=username, password=password, db=db)
# Make a query to the specific DB and Collection
cursor = db[collection].find(query)
# Expand the cursor and construct the DataFrame
df = pd.DataFrame(list(cursor))
# Delete the _id
if no_id:
del df['_id']
return df
答案 0 :(得分:0)
您可以查看db.currentOp()
功能列表 - >它显示当前正在运行的查询以及详细信息。它还会显示它们运行的持续时间(secs_running)
。
检查MongoDB控制台并运行此功能,然后分析输出
db.currentOp({"sec_srunning": {gte: 3}})
如果您的CPU负载是100%,您可以使用不同的值,并且可以最小化输出并找到错误的查询'。
分析最重要的关键: active:表示查询是在' in progess'州 secs_running:查询的持续时间,以秒为单位 ns:针对您执行查询的集合名称 查询:查询体 所以现在我们知道如何找到可能导致高CPU负载的慢查询。
此链接中的此解决方案:https://medium.com/quickblox-engineering/troubleshooting-mongodb-100-cpu-load-and-slow-queries-da622c6e1339 您可以在那里查看更多信息。