Что такое быстрая структура для организации коллекций в MongoDB для хранения торговых данных?

#database #mongodb #pymongo #algorithmic-trading #cryptocurrency

#База данных #mongodb #пимонго #алгоритмическая торговля #криптовалюта #pymongo

Вопрос:

Я храню исторические торговые данные с нескольких криптобирж. В каждом обмене перечислены разные символы, такие как и т.д. "BTC-28MAR19_FUTURES", "BTC-31MAR19_FUTURES" которыми можно торговать, в общей сложности до 500 различных символов. Для каждого из этих символов существуют торговые данные, что-то вроде "timestamp", "price", "volume" , и т.д. На символ приходится несколько миллионов сделок, которые мне нужно сохранить.

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

коллекция name = bitmex_futures , которая содержит все сделки для всех существующих продуктов на этой бирже. Записи выглядят так:

 {"symbol" : "BTC-28MAR19", "price" : 4500, "trade_id" : 12345, etc.}
{"symbol" : "BTC-28MAR19", "price" : 4300, "trade_id" : 12346, etc.}
{"symbol" : "BTC-31MAR19", "price" : 4230, "trade_id" : 12347, etc.}
  

Однако это очень медленно, поскольку записей очень много, если я хочу запросить данные.

Имеет ли смысл создавать единую коллекцию для каждого символа? Если в итоге у меня будет 500 коллекций с миллионами торговых данных в каждой из них, будет ли это по-прежнему быстро (или даже быстрее)?

Комментарии:

1. Вы можете взглянуть на github.com/manahl/arctic (Я могу работать на манала …)

Ответ №1:

Если вам не нужно запрашивать торговые символы, одна коллекция для каждого торгового символа может иметь смысл. Если ваш trade_id уникальный, я бы указал это как _id , чтобы вы могли использовать автоматический уникальный индекс, созданный для _id .

Каковы шаблоны запросов? Может подойти создание составного индекса для полей, к которым вы хотите запросить вместе.

В общем, вы должны добавлять индексы к полям, которые вы запрашиваете. Вы можете использовать explain() план, чтобы гарантировать, что ваши запросы выполняются эффективно.

Если вы новичок в MongoDB, этот бесплатный онлайн-курс — хорошее место для начала.

Комментарии:

1. Большое вам спасибо за ваши комментарии. trade_id каждый символ уникален. Обычно я запрашиваю 1-10 символов, и для них нужны все сделки в определенном временном диапазоне. Я читал, что создание индекса имеет смысл, но до сих пор редко касался этих функций из MongoDB.

2. Добавлена ссылка на бесплатный онлайн-курс для начинающих. Вы можете повысить уровень оттуда. Все наши онлайн-тренинги бесплатны.

3. По опыту, бесплатные университетские курсы MongoDB действительно хороши. Я настоятельно рекомендую вам взглянуть, как упоминал @JoeDrumgoole.

4. @JoeDrumgoole Почему это имеет смысл только в том случае, если мне не нужно запрашивать торговые символы? Например, иногда я запрашиваю три разных торговых символа и использую их данные. Потенциально имеет смысл использовать одну коллекцию для каждого символа, но если я впоследствии пересчитаю временную метку в единый формат (т. Е. Агрегирую Каждый час), то для результирующего нового набора временных рядов я бы использовал только одну коллекцию.

5. Если вы хотите выполнить запрос по торговым символам, поместите их все в одну коллекцию и проиндексируйте по торговому символу.