Объединение различных гранулярных временных рядов в influenxdb - PullRequest
1 голос
/ 08 ноября 2019

Я хочу сохранить в InfluxDB данные о сделках, а также лучшие данные о спросе / предложении, где последние обновляются намного быстрее, чем первые.

Я хочу, если возможно, использовать схему, которая позволяет мне запрашивать: «для каждой сделки на рынке X найдите наилучшую цену спроса / предложения на рынке Y, отметка времени которой <= отметка времени сделки». </p>

(я буду использовать любую версию Influx.)

Например, сделки могут выглядеть так:

   Time      Price     Volume   Direction   Market
00:01.000     100        5          1       foo-bar
00:03.000     99         50         0       bar-baz       
00:03.050     99         25         0       foo-bar
00:04.000     101        15         1       bar-baz

И данные тиков могут выглядеть примерно так:

   Time       Ask        Bid     Market
00:00.763     100         99    bar-baz
00:01.010     101         99    foo-bar
00:01.012     101         98    bar-baz
00:01.012     101         99    foo-bar
00:01:238     100         99    bar-baz
...
00:03:021     101         98    bar-baz

Я хотел бы иметь возможность каким-либо образом присоединиться к каждой сделке для некоторого рынка, например, foo-bar , имея только самые последние данные о спросе / предложении на другом рынке. например, bar-baz , и получить результат, подобный:

   Time      Trade Price    Ask     Bid
00:01.000        100        100      99
00:03.050        99         101      98

Так, чтобы я мог вычислить разницу между ценой сделки на рынке foo-bar исамая последняя заявленная цена или спрос на рынке bar-baz .

Прямо сейчас я сохраняю сделки в одном временном ряду, а в другой задаю точки запроса / ставки и объединяю их на стороне клиента, используя логику:

function merge(trades, quotes, data_points)
  next_trade, more_trades = first(trades), rest(trades)

  quotes = drop-while (quote.timestamp < next_trade.timestamp) quotes
  data_point = join(next_trade, first(quotes))

  if more_trades
    return merge(more_trades, quotes, data_points + data_point)
    return data_points + data_point

Проблемазаключается в том, что клиент должен отбросить тонны точек данных о спросе / предложении, потому что они обновляются так часто, и только самое последнее обновление до того, как сделка уместна.

Существуют десятки рынков, с последними запросами и ставками которых я мог бы сравнить сделку, в противном случае я бы просто сохранял самые последние запросы / заявки в той же серии, что и сделки.

Можно ли делать то, что я хочу, с Influx или с другой базой данных временных рядов? Альтернативное решение, которое дает результаты с более низким качеством, состоит в том, чтобы сгруппировать данные о спросе / предложении по некоторому временному интервалу, скажем, 250 мс, и взять последние из каждого интервала, чтобы по крайней мере наложить верхнюю границу количества кавычек, которые клиент должен отбросить донайти ближайший к следующей сделке.

...