CloseToAlgoTrading
CloseToAlgoTrading Ответы на вопросы
21 сентября 2016, 11:04

Поделитесь, какую структуру базы данных выбирали для более быстрого доступа(сохранения)потоковых данных? какую организацию данных выбрали и почему?

Поделитесь, какую структуру базы данных выбирали для более быстрого доступа(сохранения)потоковых данных? какую организацию данных выбрали и почему?
20 Комментариев
  • Leo
    21 сентября 2016, 11:21
    Посмотрите на influxdb, она заточена на подобные задачи. Мы там храним данные мониторинга — прилетает тысячи метрик в секунду, т.е. задача примерно схожая
    www.influxdata.com/time-series-platform/influxdb/
  • Leo
    21 сентября 2016, 12:26

    Да, в целом направление молодое, может не устроить банк (если я правильно расшифровываю LBBW). У нас работает стабильно, нагрузка на железо при подобном режиме работы — минимальна.
    Лучше обычных DB скоростью работы, в десятки раз быстрее.
    С данными работать удобно — там поддерживается sql



    UPD. Это скриншот из встроенного веб-интерфейса, писать данные можно через HTTP API

    docs.influxdata.com/influxdb/v1.0/guides/writing_data/

      • Leo
        21 сентября 2016, 13:16
        Denis, ну вы сами понимаете, что никаких гарантий я вам дать не могу.
        Но думаю, что даже в случае внезапного закрытия проекта (пока считаю маловероятным) у вас есть возможность использовать его ещё лет десять. Бинарники на go отличаются тем, что линкуются полностью статически и не содержат никаких внешних зависимостей. Так что если текущий функционал вас полностью устраивает, то можно годами жить без апдейтов (ну и с учётом того, что это закрытая система, а не наружу в интернет).

          • Leo
            21 сентября 2016, 14:21
            Denis, насколько я могу судить, библиотека на C была, но считается устаревшей. Но судя по коду, думаю что можно адаптировать, там не сильно сложно на мой взгляд, простой сетевой обмен, можно поверх libcurl написать какой-то враппер

            Список актуальных API - https://docs.influxdata.com/influxdb/v1.0/tools/api_client_libraries/
  • Андрей К
    21 сентября 2016, 13:39
    О! постою послушаю =))
  • Андрей К
    21 сентября 2016, 13:43
    Кстати, а задача стоит также их и онлайн обрабатывать параллельно в бд?
  • Андрей К
    21 сентября 2016, 14:10
    Если просто кидать, то из опыта, что делал я:
      — не грузить БД мелкими sql запросами на добавление
      — копить данные в некий промежуточный буфер какое то время и потом разом добавить в БД (лично я после мытрств остановился на том, что делаю это 2 раза в сутки и все).

    Исходя из этого, пришлось выбирать БД, которая умеет некий буфер сразу помещать в таблицу, без множественных insert запросов. То есть вам нужно добавить к примеру в таблицу 1000 записей и она будет делать не 1000 инсертов, а один какой то свой метод. FIREBIRD например так делать не умеет.

    Так умеет делать например:
      — sybase
      — так умеет делать c# с Entity Framework в связке с Microsoft SQL (тут вообще можно на потоки разделить, если ядер не одно)
      — еще какие нибудь БД, с которыми я не столкнулся =)

    На примере, если нужно добавить тысяч 200 записей, 200т инсертов может занять минут 8, особенно если много индексов.
    Подход через промежуточный буфер решает это секунд за 7-10.
      • Андрей К
        21 сентября 2016, 14:23
        Denis, да, не совсем актуально. Я поэтому и спросил уточняющий вопрос. В вашем тогда вопросе придется долбить инсертами получается, на вскидку ничего и не придумать дельного.
        Но тогда второй вопрос, быстро обрабатывать потом данные. Тут уже придется грамотно выстроить индексацию полей и sql запросы на выборку. Вооружайтесь тогда анализаторами и боритесь за секунды =)) При этом надо иметь ввиду, что большое кол-во индексов прямиком влияет на время добавления данных. Приходится все время варьировать в этом вопросе, что выбрать, быстрый insert или быстрый select
          • Андрей К
            21 сентября 2016, 14:57
            А используете чистые данные для записи или делаете какую то предобработку, форматирование?
            как я уже сказал, если время ценно, то приходится проводить опыты. Что быстрее в конретном примере: обработать заранее и добавить в БД, либо потом при выборке обрабатывать в sql

            Но если вы познакомитесь с современными плюшками, там уже даже думать не надо. =)) это я про Entity Framework. Олд скул программирование БД все больше уходит в прошлое =))
        • Капитан Сильвер
          21 сентября 2016, 14:33
          Автор, тебе Анрей К, првильно говорит. NET framework+ плюшки от майкрософта. 
          Насколько понимаю, твоя задача тривиальна и решается по сути двумя способами(без костылей), Это мелгомягкие технологии или Джава Энтерпрайз(EJB 3.0)- зачем изобретать велоcипеды?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн