#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. Если вы хотите выполнить запрос по торговым символам, поместите их все в одну коллекцию и проиндексируйте по торговому символу.