Масштабная база данных, которая получает потоковые данные с небольшими ресурсами - PullRequest
0 голосов
/ 08 апреля 2019

Мой пример использования следующий: я параллельно запускаю около 60 веб-сокетов из 7 источников данных, которые регистрируют биржевые тикеры (данные временных рядов). В настоящее время я записываю данные в mongodb, который размещен на виртуальной машине Google Cloud, так что каждый источник данных имеет свою собственную коллекцию, а все коллекции размещаются в одной базе данных.

Тем не менее, база данных выросла до 0,6 ГБ и ~ 10 миллионов строк только после пяти дней данных. Я довольно новичок в таких вопросах, но у меня есть ощущение, что это не жизнеспособное долгосрочное решение. Мне никогда не понадобятся все данные одновременно, но мне нужны все данные для запроса по дате / валюте. Однако, как я понял, эти запросы могут стать невозможными, если набор данных больше моей оперативной памяти, это правда?

Кроме того, это исследовательский проект, но, к сожалению, в настоящее время я не могу использовать университетский кластер, поэтому я размещаю данные на частной виртуальной машине. Однако это ограничено бюджетом, и высокопроизводительные машины быстро становятся очень дорогими. Вот почему я ставлю под сомнение мой выбор дизайна. В настоящее время я думаю о том, чтобы либо перейти на другую базу данных, но боюсь, что у меня снова возникнут те же проблемы, либо экспортировать базу данных один раз в неделю / месяц / что угодно в CSV и уничтожить ее. Это было бы довольно неприятно, и я также боюсь потерять данные.

Итак, мой вопрос: как я могу спроектировать эту базу данных таким образом, чтобы я мог подмножество данных для одного из ключей (datetime или ticker_id), даже если база данных становится больше, чем RAM моей машины? Дисковое пространство не проблема.

1 Ответ

1 голос
/ 09 апреля 2019

В дополнение к тому, что Алекс Блекс уже прокомментировал в отношении хранения и производительности.

Время ответа на запрос, через 5 дней у вас будет около 10 миллионов строк, будет ухудшаться по мере роста набора данных. Вы можете взглянуть на sharding , чтобы разбить таблицу на разумные порции и при этом иметь доступ ко всем данным для запроса.

...