从mongodb导入数据

时间:2018-04-20 06:48:09

标签: java python mongodb

当我使用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

1 个答案:

答案 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 您可以在那里查看更多信息。