【发布时间】:2020-01-07 06:56:11
【问题描述】:
在我们的电子交易系统中,我们需要根据 100+ 份合约的分时数据进行计算。
一条消息中没有收到合约的报价数据。一条消息仅包含一份合约的报价数据。合同的时间戳略有不同(有时差异很大,但我们忽略这种情况)。
eg: (first column is timestamp. Second is contract name)
below 2 data has 1ms diff
10:34:03.235,10002007,510050C2006A03500 ,0.0546
10:34:03.236,10001909,510050C2003A02750 ,0.3888
below 2 data has 3ms diff
10:34:03.594,10002154,510300C2003M03700 ,0.4985
10:34:03.597,10002118,510300C2001M03700 ,0.4514
只有价格变化的才会有数据。因此,我无法计算合同编号来了解我是否已收到此报价的所有数据。
但另一方面,我们不想等到收到所有的tick数据,因为有时数据可能会延迟很长时间,我们会想要排除它们。
需要低延迟。所以我认为我们将定义一个窗口——比如 50 毫秒——并开始根据我们在过去 50 毫秒内收到的任何数据进行计算。
处理此类用例的最佳方法是什么?
本来我想用redis流来维护一个小队列,每当收到一个合约的数据时,我都会把它推送到redis流中。但我不知道在特定时间(比如 50 毫秒)过去后立即提取数据的最佳方式是什么。
我正在考虑也许我应该使用其他一些技术? 任何建议表示赞赏。
【问题讨论】:
-
不确定我是否关注。听起来 Redis 流应该可以解决问题。您能否详细说明您在使用 Redis 流时遇到了什么问题?
-
其实我对redis流还不是很熟悉。我知道它像队列一样工作,但我怎样才能让它像这样工作:检查队列中的消息,如果(最新时间戳 - 最新时间戳)> 阈值,读取所有这些消息? redis流支持吗?
标签: redis time-series queue