我想在 InfluxDB 中存储交易以及最佳询价/出价数据,后者的更新速度比前者快得多。
如果可能的话,我想使用一个允许我查询的模式:“对于市场 X 上的每笔交易,找到时间戳为 <= 交易时间戳的市场 Y 上的最佳卖价/买价”。
(我会使用任何版本的 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 毫秒)对要价/投标数据进行分组,并从每个间隔中取最后一个,以至少对客户之前必须放弃的报价数量施加上限找到最接近下一笔交易的交易。