Задача стоит в сохранении потоковых данных тиков, объемов и поток ордеров (акции, опционы). Так же синхронизация с историей яхуфинанс. Все для дальнейшего анализа офлайн и на лету.
Посмотрите на 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… ну и иногда питон. А яву я по религиозным причинам не люблю %)
Страховка на миллион: как Tickmill защищает ваши средства через Lloyd's of London
Многие брокеры не предлагают никакой страховки сверх того, что требует регулятор. Мы в Tickmill считаем, что этого недостаточно и пошли дальше. Сегодня рассказываем подробнее: кто нас...
Длинные ОФЗ сейчас выглядят одним из самых интересных инструментов для инвестора, который хочет получить не только купонный доход, но и результат от возможного снижения рыночных...
Записки инвестора. Ключевые тренды и события на рынке
«Записки инвестора» — еженедельная рубрика для быстрого погружения в рынок. Мы выделяем самые важные события, за которыми стоит следить — и вы можете пробежаться по ним буквально за пару...
Sergei, Обязывающий меморандум на таком уровне — 2 раза не подписывают!
— Там уже — И ЦЕНА ГАЗА — ТОЧНО ПРОПИСАНА — потому как всё уже из цены на газ просчитали все расходы всем подрядчикам стро...
Судя по всему, отдельный смартфон для Макса все-таки завести придётся
Коды подтверждения для входа в банки, онлайн-магазины и прочие сервисы будут приходить в Макс, сообщает Mash.
Операторы ...
не парни надо бросать пить… поставил на победу атлетико, они закатили 2 голик… правда всего 10… кэф 1.4....
я не хвастаюсь… просто по пьяни везет...
но здоровье не железное… млять…
Сокол, Я не торгую, я инвестирую в облигации! У меня все деньги в обороте, я пробывал спекулировать, но это не моё. Например: недавно покупал в первичке Эко ниву по 1000 рублей а продал по 1036 в к...
ЧОЛПОН-АТА /Киргизия/, 15 августа. РФ намерена в этом году продать перешедший в собственность государства пакет акций «Южуралзолота» (67,25%) миноритарному акционеру — компании, входящей в структуру Г...
⭐️ WDC. Корректировка плана. В прогнозе WDC мои цели оказались слишком скромными. Текущий рост, как и во многих техах, развивается с удлинением — сейчас идет волна [3].
Цели текущего движения в...
Saudi Aramco - квартальная чистая прибыль максимум за 3 года Саудовская Аравия продолжает грустить из-за перекрытия пролива, что аж квартальная прибыль Aramco — максимум за 3 года
Пролив...
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… ну и иногда питон. А яву я по религиозным причинам не люблю %)