Задача стоит в сохранении потоковых данных тиков, объемов и поток ордеров (акции, опционы). Так же синхронизация с историей яхуфинанс. Все для дальнейшего анализа офлайн и на лету.
Посмотрите на influxdb, она заточена на подобные задачи. Мы там храним данные мониторинга — прилетает тысячи метрик в секунду, т.е. задача примерно схожая www.influxdata.com/time-series-platform/influxdb/
Lev, спасибо за наводку, очень интересно… надо углубиться, это так называемая база временных рядов, но что то вроде как очень молодая.
А насколько они лучше обычных бд. т.е. как там получением данных по каким нить завернутым запросам? :) И в целом удобно ли потом с данными работать?
Да, в целом направление молодое, может не устроить банк (если я правильно расшифровываю LBBW). У нас работает стабильно, нагрузка на железо при подобном режиме работы — минимальна.
Лучше обычных DB скоростью работы, в десятки раз быстрее.
С данными работать удобно — там поддерживается sql
UPD. Это скриншот из встроенного веб-интерфейса, писать данные можно через HTTP API
Lev, LBBW в моем случае обозначения города и земли. Не банк. :) Проект частный так что любое направление подойдет. Просто не хочется потом все перестраивать если вдруг логика работы с данными поменяется.
Поддержка sql это хорошо.
Denis, ну вы сами понимаете, что никаких гарантий я вам дать не могу.
Но думаю, что даже в случае внезапного закрытия проекта (пока считаю маловероятным) у вас есть возможность использовать его ещё лет десять. Бинарники на go отличаются тем, что линкуются полностью статически и не содержат никаких внешних зависимостей. Так что если текущий функционал вас полностью устраивает, то можно годами жить без апдейтов (ну и с учётом того, что это закрытая система, а не наружу в интернет).
Lev, гарантий я не требую, инетресно опыт других людей узнать.
На данный момент я использую постргри но в таком очень простом его виде, без всяких там примочек.
Но как то у меня не очень удобные структуры данных выходят, все ж приходит асинхронно, поэтому походу хранить чистые не подготовленные данные самое простое решение, но не самое эфективное.
Кстати, а у этой бд есть какая библиотека под C/C++?
Denis, насколько я могу судить, библиотека на C была, но считается устаревшей. Но судя по коду, думаю что можно адаптировать, там не сильно сложно на мой взгляд, простой сетевой обмен, можно поверх libcurl написать какой-то враппер
Список актуальных API - https://docs.influxdata.com/influxdb/v1.0/tools/api_client_libraries/
Андрей К, В данном случае еще не знаю, пока надо просто кидать в базу, что бы потом можно было вменяемы анализ делать, модели всякие обучать и т.д.
В дальнейшем возможно понадобится эти самые данные обрабатывать онлайн.
Хотя, что вы имеете ввиду онлайн?
Сама система будет работь на лету с данными от брокера в обход бд, но возможно понадобится некоторые вещи подкачивать из базы.
Если просто кидать, то из опыта, что делал я:
— не грузить БД мелкими sql запросами на добавление
— копить данные в некий промежуточный буфер какое то время и потом разом добавить в БД (лично я после мытрств остановился на том, что делаю это 2 раза в сутки и все).
Исходя из этого, пришлось выбирать БД, которая умеет некий буфер сразу помещать в таблицу, без множественных insert запросов. То есть вам нужно добавить к примеру в таблицу 1000 записей и она будет делать не 1000 инсертов, а один какой то свой метод. FIREBIRD например так делать не умеет.
Так умеет делать например:
— sybase
— так умеет делать c# с Entity Framework в связке с Microsoft SQL (тут вообще можно на потоки разделить, если ядер не одно)
— еще какие нибудь БД, с которыми я не столкнулся =)
На примере, если нужно добавить тысяч 200 записей, 200т инсертов может занять минут 8, особенно если много индексов.
Подход через промежуточный буфер решает это секунд за 7-10.
Андрей К, Это кстати очень хорошее наблюдейние/замечание, а позвольте поинтерисоваться, тут уж просто из любопытства. Если вы эти данные надо использовать сразу в другом процессе который их берет из бд, как вы обходите задержку по времени? скажем если к вам пришло 999 значений за первую секунду, а последнее пришло через 10 минут? или это не актуально в ваших задачах?
Denis, да, не совсем актуально. Я поэтому и спросил уточняющий вопрос. В вашем тогда вопросе придется долбить инсертами получается, на вскидку ничего и не придумать дельного.
Но тогда второй вопрос, быстро обрабатывать потом данные. Тут уже придется грамотно выстроить индексацию полей и sql запросы на выборку. Вооружайтесь тогда анализаторами и боритесь за секунды =)) При этом надо иметь ввиду, что большое кол-во индексов прямиком влияет на время добавления данных. Приходится все время варьировать в этом вопросе, что выбрать, быстрый insert или быстрый select
Андрей К, секунды в нашем вопросе слишком долго :). Но в теории можно пользовать временные интервалы для выгрузки данных, скажем туже каждую секунду.
В моем случае работа с бд, и работа системы онлайн как бы разделены. Но никто ж не знает как оно будет в будущем )).
А используете чистые данные для записи или делаете какую то предобработку, форматирование?
А используете чистые данные для записи или делаете какую то предобработку, форматирование?
как я уже сказал, если время ценно, то приходится проводить опыты. Что быстрее в конретном примере: обработать заранее и добавить в БД, либо потом при выборке обрабатывать в sql
Но если вы познакомитесь с современными плюшками, там уже даже думать не надо. =)) это я про Entity Framework. Олд скул программирование БД все больше уходит в прошлое =))
Автор, тебе Анрей К, првильно говорит. NET framework+ плюшки от майкрософта.
Насколько понимаю, твоя задача тривиальна и решается по сути двумя способами(без костылей), Это мелгомягкие технологии или Джава Энтерпрайз(EJB 3.0)- зачем изобретать велоcипеды?
Капитан Сильвер, так я ничего и не изобретаю, мой вопрос был не сколько о что за бызу юзать, сколько о том как данные организовать. Видимо не правильно поставил.
Если брать обычную бд, и сырые данные, то получается что мы имеем много так сказать не нужной информации… тот же тикер ид в каждой из таблиц, но как то же надо их связывать и идентифицировать.
Хотел узнать может есть какой опыт наработанный уже. Что бы не натыкаться на ошибки проектирования :). Но как Андрей сказал имееет смысл смотреть на конкретных задачах.
по поводу .net и явы… первое хорошо но у меня связка c++/qt… ну и иногда питон. А яву я по религиозным причинам не люблю %)
Геополитика качает рынки. Бюджетное правило больше не работает?
Рубль ― справедливый? Почему бюджетное правило создано, чтобы его нарушать? Стоит ли бояться двойного курса? Какие инвестидеи есть на случай ослабления валюты? Обсудили сырьевые рынки, рост цен на...
Апрель обещает стать одним из самых активных месяцев для команды «МГКЛ». Мы продолжаем расширять присутствие в профессиональном сообществе, участвуя в ключевых отраслевых событиях и...
📌Редактируемая версия таблицы — в 👉👉👉 чате Иволги :
👉 t.me/ivolgavdo/90750
👉 max.ru/c/-72213144171887/AZ1hO7vjWE0
Все изменения облигационных позиций в публичном...
Выработка электроэнергии в РФ в феврале 2026г. по Росстату и рекордный объем потребления энергии в 1 квартале 2026г.
Росстат представил данные по выработке электроэнергии в РФ в феврале 2026г.: 👉 выработка электроэнергии в РФ — 107,43 млрд кВт*ч. ( +1,7 % г/г)
— в т.ч. выработка ТЭС станциями —...
Россия в марте нарастила экспорт дизельного топлива из балтийских портов на 22% по сравнению с февралем и на 34% по сравнению с мартом 2025 года — до 1,78 млн т, следует из обзора Центра ценовых индек...
Сергей Жовтобрюх, никто не ждёт дивов пока если будут просто будет бонус все уже в цене заложено) как по мне продавливают цену на небольшом объёме ждут наполнения уровня заявками и скупают уровень
Путин поручил до лета завершить разработку стратегии креативной экономики
Администрация Президента России
Владимир Путин (Фото: Администрация Президента России)
Президент Владимир Путин по...
Дух Анкориджа, но Иран как обычно не в курсе… Вот всегда так! Трамп бедняжка старается, договаривается, правда не понятно с кем...
А потом Иран такой — а мы не кем вообще ни о чем не договарив...
✅ММВБ Продажи пока преобладают. Но любой отскок в прошлые зоны продаж может дать намек на формирование структуры по второму варианту. Пока идет реализация первого варианта.
https://t.me/+F6Ka767DDgF...
B2B-РТС объявляет о намерении провести IPO на Мобирже ПАО «B2B-РТС» (далее — «B2B-РТС», «Платформа»), крупнейшая[1] российская электронная торговая платформа для бизнеса и государства, объявляет о нам...
www.influxdata.com/time-series-platform/influxdb/
А насколько они лучше обычных бд. т.е. как там получением данных по каким нить завернутым запросам? :) И в целом удобно ли потом с данными работать?
Да, в целом направление молодое, может не устроить банк (если я правильно расшифровываю LBBW). У нас работает стабильно, нагрузка на железо при подобном режиме работы — минимальна.

Лучше обычных DB скоростью работы, в десятки раз быстрее.
С данными работать удобно — там поддерживается sql
UPD. Это скриншот из встроенного веб-интерфейса, писать данные можно через HTTP API
docs.influxdata.com/influxdb/v1.0/guides/writing_data/
Поддержка sql это хорошо.
Но думаю, что даже в случае внезапного закрытия проекта (пока считаю маловероятным) у вас есть возможность использовать его ещё лет десять. Бинарники на go отличаются тем, что линкуются полностью статически и не содержат никаких внешних зависимостей. Так что если текущий функционал вас полностью устраивает, то можно годами жить без апдейтов (ну и с учётом того, что это закрытая система, а не наружу в интернет).
На данный момент я использую постргри но в таком очень простом его виде, без всяких там примочек.
Но как то у меня не очень удобные структуры данных выходят, все ж приходит асинхронно, поэтому походу хранить чистые не подготовленные данные самое простое решение, но не самое эфективное.
Кстати, а у этой бд есть какая библиотека под C/C++?
Список актуальных API - https://docs.influxdata.com/influxdb/v1.0/tools/api_client_libraries/
В дальнейшем возможно понадобится эти самые данные обрабатывать онлайн.
Хотя, что вы имеете ввиду онлайн?
Сама система будет работь на лету с данными от брокера в обход бд, но возможно понадобится некоторые вещи подкачивать из базы.
— не грузить БД мелкими sql запросами на добавление
— копить данные в некий промежуточный буфер какое то время и потом разом добавить в БД (лично я после мытрств остановился на том, что делаю это 2 раза в сутки и все).
Исходя из этого, пришлось выбирать БД, которая умеет некий буфер сразу помещать в таблицу, без множественных insert запросов. То есть вам нужно добавить к примеру в таблицу 1000 записей и она будет делать не 1000 инсертов, а один какой то свой метод. FIREBIRD например так делать не умеет.
Так умеет делать например:
— sybase
— так умеет делать c# с Entity Framework в связке с Microsoft SQL (тут вообще можно на потоки разделить, если ядер не одно)
— еще какие нибудь БД, с которыми я не столкнулся =)
На примере, если нужно добавить тысяч 200 записей, 200т инсертов может занять минут 8, особенно если много индексов.
Подход через промежуточный буфер решает это секунд за 7-10.
Но тогда второй вопрос, быстро обрабатывать потом данные. Тут уже придется грамотно выстроить индексацию полей и sql запросы на выборку. Вооружайтесь тогда анализаторами и боритесь за секунды =)) При этом надо иметь ввиду, что большое кол-во индексов прямиком влияет на время добавления данных. Приходится все время варьировать в этом вопросе, что выбрать, быстрый insert или быстрый select
В моем случае работа с бд, и работа системы онлайн как бы разделены. Но никто ж не знает как оно будет в будущем )).
А используете чистые данные для записи или делаете какую то предобработку, форматирование?
Но если вы познакомитесь с современными плюшками, там уже даже думать не надо. =)) это я про Entity Framework. Олд скул программирование БД все больше уходит в прошлое =))
Насколько понимаю, твоя задача тривиальна и решается по сути двумя способами(без костылей), Это мелгомягкие технологии или Джава Энтерпрайз(EJB 3.0)- зачем изобретать велоcипеды?
Если брать обычную бд, и сырые данные, то получается что мы имеем много так сказать не нужной информации… тот же тикер ид в каждой из таблиц, но как то же надо их связывать и идентифицировать.
Хотел узнать может есть какой опыт наработанный уже. Что бы не натыкаться на ошибки проектирования :). Но как Андрей сказал имееет смысл смотреть на конкретных задачах.
по поводу .net и явы… первое хорошо но у меня связка c++/qt… ну и иногда питон. А яву я по религиозным причинам не люблю %)