Ускорение mongodb найти запрос с большими документами - PullRequest
0 голосов
/ 04 июля 2018

У меня есть коллекция монго около 5 ГБ, которая содержит около 200 тыс. Документов. У каждого из них есть имя, валюта и дата, а затем большая строка (это данные, которые меня интересуют), что дает каждому документу общий размер около 5 МБ.

Моя проблема в том, что мне нужно как можно быстрее найти определенное имя и валюту для 250 различных дат.

В настоящее время я использую

db.collection.find(
{'name': somename, 'currency': mycurrency, 
'valuation_date': {'$in': [list_of_250_datetime_datetime]}
}) [see more detailed query in the update below]

В настоящее время скорость весьма разочаровывает, так как кажется, что я загружаю только около 10 документов в секунду, когда я запускаю сервер mongod на своем локальном хосте.

Я также добавил индексы для имени, валюты и даты, а также для составного индекса. Добавление индексов делает это примерно на 25% быстрее.

Что еще я могу сделать, чтобы ускорить загрузку этих документов из mongodb?

Стоит отметить: документы не могут быть разделены, так как мне нужна большая строка данных для каждой даты / имени / валюты, и я не могу контролировать эту часть.

Любые предложения приветствуются.


UPDATE:

Вот более подробный профиль происходящего:

Вот полный запрос: Предполагается, что при использовании Pymongo для 916 записей потребуется около 94 секунд, а при первых 100 записях в студии 3t - около 6 секунд.

db.ForecastCurveId.find({ 'Ccy': 'USD', 'Class': 'ForecastCurveId', 'Index': 'LIBOR', 'Tenor': '12M', 'source': {'$in': ['ods']}, 'valuation_date': {'$gte': new Date("2015-11-09"), '$lte': new Date("2016-11-07")}})

enter image description here

здесь профиль, если я использую pymongo: enter image description here

...