我正在研究一个用于存储时间序列的cassandra数据模型(我是一个cassandra新手)。我有两个应用程序:盘中股票数据和传感器数据。
股票数据将以一分钟的时间分辨率保存。七个数据字段构建一个时间框架:符号、日期时间、打开、高、低、关闭、卷
我将主要通过符号和日期来查询数据。e、 g.给我2013-01-01和2013-01-31之间的所有aapl数据,按datetime订购。cassandra查询的建议是查询整列。所以你可以用open,high,low,close,volume键创建五行。每一个符号和每一分钟都有一列。e、 g.“aapl:2013-01-04t130400z". 这将导致一个由五行和nnt列组成的表,其中n=符号数,nt=分钟数。大多数时候我会查询日期范围。i、 一天中的每一分钟。所以我可以重新排列数据,使列名为“aapl:2013-01-04“行:opent130400z,hight130400z,lowt130400z,closet130400z,volumet130400z。这将生成一个包含nnd列(n:符号数,nd:天数)和5*nm行(nm:每天的分钟数/条目数)的表。
总而言之:我有一些列,它们为一个符号保存了整整一天的信息。
我在这里找到了一个关于如何在cassandra中处理时间序列数据的描述http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra 但我真的不明白,如果他们用小时(13329600)作为列名或行键!?我知道他们用小时作为行键,用小时间步作为列。所以他们会有一个固定的列号。但这在阅读中会有缺点,因为我必须对键进行范围查询!我说得对吗?
第二个问题:如果我有传感器数据,它比1分钟的股票数据更细粒度(假设我必须以微秒的分辨率保存时间步长),我将如何处理这个问题?如果我使用列来保存传感器通道和小时的组合,以及自上一个小时以来微秒的行,这将导致3600000000行和n*nh列(n:传感器数量,nh:小时数量)。从上个小时开始,我不能用微秒来计算列,因为我有36亿个点,这比允许的20亿个列的数量要高。
我拿到了吗?你觉得这个问题怎么样?如何解决?
谢谢您!
最好的,马尔特
1条答案
按热度按时间oprakyz71#
所以我有一个关于股票数据的第一个问题的建议。天真的实现可能如下所示:
行键:
列格式:
名称:当前日期时间精确到一分钟
值:开盘、高、低、收盘、成交量的组合列
所以你会有
这将给你大约50万列在一年内,所以它可能是好的,也许4年。我不会去试图达到20亿的极限。您可以在行键上定义一个拆分因子。这完全取决于您的使用模式,但是一个简单的模式可能是在年份上,因此列族条目可能看起来像这样,带有一个复合行键,这将保证您每行的列数始终少于一百万列。