时间序列的Cassandra数据模型

时间:2013-04-24 11:58:30

标签: database nosql cassandra time-series bigdata

我正在研究用于存储时间序列的Cassandra数据模型(我是Cassandra新手)。 我有两个应用程序:日内库存数据和传感器数据。

库存数据将以一分钟的时间分辨率保存。 七个数据域构建一个时间范围: 符号,日期时间,打开,高,低,关闭,音量

我将主要通过符号和日期查询数据。例如告诉我Datetime订购的2013-01-01和2013-01-31之间的AAPL的所有数据。 对cassandra查询的建议是查询整列。因此,您可以使用“打开”,“高”,“低”,“关闭”,“音量”键创建五行。并为每个符号和分钟一个自己的列。例如。 “AAPL:2013-01-04T130400Z”。 这将产生一个包含五行和n * NT列的表,其中n =符号数,nT =分钟数。 大多数时候我会查询日期范围。即一天的所有时间。所以我可以重新排列数据,使列名为“AAPL:2013-01-04”和行:OpenT130400Z,HighT130400Z,LowT130400Z,CloseT130400Z,VolumeT130400Z。 这将产生一个包含n * nD列的表(n:符号数,nD:天数)和5 * nM行(nM:每天的分钟/条目数)。

总结一下:我有一些列,它们为一个符号保存一整天的信息。

我在这里找到了如何处理cassandra中时间序列数据的说明http://www.datastax.com/dev/blog/advanced-time-series-with-cassandra 但我真的没有,如果他们使用小时(1332960000)作为列名或行键!? 我知道他们使用小时作为行键,并将小时间步长作为列。所以他们会有一个固定的列号。但这在读取时会有缺点,因为我必须对键进行范围查询!我是对的吗?

第二个问题: 如果我有传感器数据,这比1分钟的库存数据(比如说我必须以微秒的分辨率保存时间步长)更精细,我将如何处理? 如果我使用列来保存传感器通道和小时的复合,以及自上一小时以来的微秒行,则会产生3,600,000,000行和n * nH列(n:传感器数量,nH:小时数)。 我不能使用自上个小时以来的微秒列,因为我有36亿个点,高于允许的20亿个列。

我明白了吗? 你怎么看待这个问题?怎么解决?

谢谢!

最佳, 马尔特

1 个答案:

答案 0 :(得分:0)

所以我对你关于股票数据的第一个问题有一个建议。一个天真的实现可能如下所示:

RowKey:

列格式:

名称:当前日期时间为一分钟

值:Open,High,Low,Close,Volume

的复合列

所以你会有像

这样的东西
AAPL = [2013-05-02-15:38:00 | 441.78:448.59:440.63:15066146:445.52] ... [2013-05-02-15:39:00 | 441.78:448.59:440.63:15066146:445.52] ... [2013-05-02-15:40:00 | 441.78:448.59:440.63:15066146:445.52]

这将在一年内为您提供大约五十万个列,所以可能可能是4年。我不会去尝试达到20亿的限制。您可以做的是在行键上定义拆分因子。这一切都取决于您的使用模式,但一年中可能只有一个简单的使用模式,因此列系列条目可能看起来像这样,使用复合行键,这样可以保证每行总是少于一百万列。

AAPL:2013 = [05-02-15:38:00 | 441.78:448.59:440.63:15066146:445.52] ... [05-02-15:39:00 | 441.78:448.59:440.63:15066146:445.52] ... [05-02-15:40:00 | 441.78:448.59:440.63:15066146:445.52]

相关问题