redis timeseries是捕捉股价蜡烛棒的正确工具吗

rryofs0p  于 2021-06-10  发布在  Redis
关注(0)|答案(2)|浏览(471)

我目前正在尝试做一个简单的实现股票价格蜡烛棒。假设我们有一只股票叫xyz。该股票收到一系列价格(没有特定的频率),例如:xyz:[10.2,10.7,12,11….]。
目标是记录每一分钟的一些指标,以反映股票的状态。蜡烛棒有一些指标,比如收盘价(一分钟内的最后一个已知价格)、高价(一分钟内的最高价格)等等。
我认为可以实现这一点的一种方法是使用redis timeseries。我之所以考虑这个解决方案,是因为我可以在价格流上创建规则,每60秒它就会将一些聚合(比如:max、min、first……等等)刷新到一个目标bucket。
我当前的实现使用redis timeseries(在python中)为每个股票价格提供蜡烛棒,类似于这样(再次使用stock xyz作为示例),为了简单起见,没有标签:

from redistimeseries.client import Client
r = Client()
r.flushdb()

# Create source & destination buckets

r.create('XYZ_PRICES')  # source
r.create(closing_price)
r.create(highest_price)

# Create rules to send data from src -> closing_price & highest_price buckets

r.createrule(src, 'closing_price', 'last', bucket_size_msec=60000)
r.createrule(src, 'highest_price', 'max', bucket_size_msec=60000)

我的问题是:
有没有办法在一个规则中发送多个聚合(如max、last…等),而不是为每个股票创建多个源和目标存储桶?
redis timeseries是否适合此任务?或者使用另一个解决方案(例如redis streams)会更容易吗?

a1o7rhls

a1o7rhls1#

f4,感谢您尝试redistimeseries。
您可以将模块配置为根据预定义规则自动创建规则。文档中有描述:https://oss.redislabs.com/redistimeseries/configuration/#compaction_policy-政策。
我希望这能解决你的问题。

nbewdwxp

nbewdwxp2#

由于每个时间戳都可以保存一个聚合,因此没有向下采样序列发送多个聚合的选项。您可以利用标签一次查询所有序列。
redistimeseries将是一个很好的解决方案,因为它将在插入时对数据进行降采样,因此查询它将非常快。它还使用双增量压缩,这意味着您的数据将需要比其他一些解决方案更少的内存。如果您只关心烛台,甚至可以使用保留来注销源数据。

r.create('XYZ_PRICES', retention_msecs=300000, labels={'name':'xyz', 'type:src'})

r.create(opeing_price, labels={'name':'xyz', 'type:opening'})
r.create(closing_price, labels={'name':'xyz', 'type:closing'})
r.create(highest_price, labels={'name':'xyz', 'type:highest'})
r.create(lowest_price, labels={'name':'xyz', 'type:lowest'})

r.createrule(src, 'opening_price', 'first', bucket_size_msec=60000)
r.createrule(src, 'closing_price', 'last', bucket_size_msec=60000)
r.createrule(src, 'lowest_price', 'min', bucket_size_msec=60000)
r.createrule(src, 'highest_price', 'max', bucket_size_msec=60000)

相关问题