Задача стоит в сохранении потоковых данных тиков, объемов и поток ордеров (акции, опционы). Так же синхронизация с историей яхуфинанс. Все для дальнейшего анализа офлайн и на лету.
Посмотрите на 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… ну и иногда питон. А яву я по религиозным причинам не люблю %)
«Никогда не работай с родственниками» — самый удобный миф в бизнесе
Всем привет, на связи Сергей Алексеев. Основатель Лайв Инвестинг Групп/Live Investing Group, ЛИСА/LISA, Скуллайв/School Live, Проплайв/Prop Live и Лайв ТРЕЙДЕР ТВ/Live ТРЕЙДЕР ТВ. Сегодня...
Как отыграть рост стоимости нефти с помощью call-опционов
В начале марта цена на черное золото резко подскочила на фоне военной операции США в отношении Ирана. И теперь у акций российских нефтегазовых компаний есть потенциал для продолжения роста....
Стратегия на 2026 год: Куда нести деньги? Разбор ОФЗ, валютных облигаций и дивидендных акций
В текущих макроэкономических условиях перед инвестором встает непростой вопрос выбора. Рубль удивил всех укреплением, но надолго ли? ЦБ снижает ставку, но когда этот цикл закончится? Мы...
Газпром: переворот стоимости и кратный рост прибыли при долгосрочных проблемах в Ормузском проливе
Газпром — темная лошадка российского рынка, только ленивый не пнул эту компанию/акцию за последние 3 года
Я же считаю, что любая акция — это финансовый инструмент и многое зависит...
RADvam,
Иран (Персия)- как и Россия 2 главных претендента на роль центра империи. Империя — это то, что от натуфийской и кебаранской культуры до шумеров-ассирии-вавилона-персии и сегодняшнего...
Maksim S, Ну Венесуэльская нефть шла в китай и европу. Пойдет в США, дефицит возникнет в Китае и Европе. От перестановки мест слагаемых сумма не меняется. Глобально то сланец в сша с рынка уйдет со...
Рынок автокредитования в феврале показал значительный рост. Объем выдачи достиг 116 млрд руб. Будет расти интерес к б/у автомобилям из-за удорожания ввоза новых машин. ↖️ Рынок автокредитования в февр...
Ситуация по банковским вкладам На рынке банковских вкладов продолжается падение процентных ставок. Снижение ключевой ставки ЦБ РФ, на заседание 20.03.2026, уже учтено банками в их расчетных моделях.Од...
USDCAD - прогнозируется тройной зигзаг вниз
Текущая структура выставляется, как тройной зигзаг (вниз).
Сейчас мы во второй Х волне-связке.
«Сводный инспектор» ставит цели: 1.3717; 1.3773 (оранж...
Конституционный суд запретил налоговикам вызывать и допрашивать налогоплательщиков по их собственному делу. 📰 Конституционный суд запретил налоговикам вызывать и допрашивать налогоплательщиков по их с...
ProstoVladimir, не хочу вас расстраивать, но вряд-ли он сможет сказать) У компании сейчас уже есть темные пятна, спросите лучше, нафига они 4 триллиона в уставной капитал добавили и как идет процес...
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… ну и иногда питон. А яву я по религиозным причинам не люблю %)