Курсор pymongo занимает много времени, чтобы найти

Курсор Pymongo занимает ~ 2 секунды, предложите способы оптимизации запроса ниже.

Факты запроса

Records in MongoDB : 120,000
Indexed Key: emp_id
MongoDB Server: 3.2.11
PyMongo       : 3.5
Python        : 2.7

Курсор

Чтобы найти документ из БД, используя индексированное поле в качестве фильтра и проецируя только необходимые поля, он потребляет ~ 2 секунды.

Я ищу способы оптимизировать этот запрос, чтобы он мог быть быстрее.

db = client["db_name"]
user_data = db.collection_name.find_one(
    {"emp_id": 1234}, {'nameFirst': 1, 'nameLast': 1, 'emp_id': 1, }
)

Истекшее время: 1.829226017


Для информационных целей, пожалуйста, обратитесь к тому же запросу, используя find()

def query_cursor():
    db = client["db_name"]
    cursor = db.collection_name.find(
        {"emp_id": 1234}, {'nameFirst': 1, 'nameLast': 1, 'emp_id': 1, }
    ).limit(1)

    return cursor

def get_user_data():
    cursor = query_user_data()
    user_data = None
    for document in cursor:
        user_data = document
    return user_data

print(get_user_data())

Прошедшее время для query_cursor: 0,00215888023376

Прошедшее время для get_user_data: 1,79128599167


person Mic    schedule 30.11.2017    source источник
comment
Из вашего запроса кажется, что он будет возвращать данные довольно быстро. Таким образом, ваш расчет, вероятно, включает накладные расходы на создание начального подключения к базе данных. Где находятся ваша база данных и компьютер/сервер, на котором вы запускаете код, по отношению друг к другу?   -  person justcompile    schedule 04.12.2017
comment
@justcompile Я наконец сменил центр обработки данных и смог запустить его быстрее. Теперь это около 0,10 секунды.   -  person Mic    schedule 21.12.2017


Ответы (1)


Проблема устранена после перехода на правильный центр обработки данных. Теперь запрос БД работает очень быстро и менее чем за 0,10 секунды.

person Mic    schedule 20.12.2017