Я представляю довольно простой запрос к MongoDB (версия 2.6) с использованием библиотеки PyMongo для питона:Slow MongoDB/PyMongo запрос
query = {"type": "prime"}
logging.info("Querying the DB")
docs = usaspending.get_records_from_db(query)
logging.info("Done querying. Sorting the results")
docs.sort("timestamp", pymongo.ASCENDING)
logging.info("Done sorting the results, getting count")
count = docs.count(True)
logging.info("Done counting: %s records", count)
pprint(docs[0])
raise Exception("End the script right here")
get_records_from_db()
функция довольно проста:
def get_records_from_db(query=None):
return db.raws.find(query, batch_size=50)
Примечание что мне действительно нужно будет работать со всеми документами, а не только docs[0]
. Я просто пытаюсь получить в качестве примера docs[0]
.
Когда я запускаю этот запрос выход я получаю:
2015-01-28 10:11:05,945 Querying the DB
2015-01-28 10:11:05,946 Done querying. Sorting the results
2015-01-28 10:11:05,946 Done sorting the results, getting count
2015-01-28 10:11:06,617 Done counting: 559952 records
Однако я никогда не вернусь docs[0]
. У меня есть индексы на {"timestamp": 1}
и {"type": 1}
, и запросы, похоже, работают достаточно хорошо (поскольку счетчик возвращается довольно быстро), но я не уверен, почему я никогда не возвращаю фактический документ (документы довольно маленькие [менее 50K]). ,
Это потому, что у вас есть сверхвысокая настройка регистрации? –
Не знаете, как вхождение в pymongo повлияет на производительность, но для ведения журнала установлено значение 'logging.basicConfig (format = '% (asctime) s% (message) s', level = logging.INFO)' – Arnob