Я хочу сохранить в 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 мс, и взять последние из каждого интервала, чтобы по крайней мере наложить верхнюю границу количества кавычек, которые клиент должен отбросить донайти ближайший к следующей сделке.