我正在研究用于存储时间序列的 Cassandra 数据模型(我是 Cassandra 新手)。我有两个应用程序:盘中股票数据和传感器数据。
股票数据将以一分钟的时间分辨率保存。七个数据字段构建一个时间框架:交易品种、日期时间、开盘价、最高价、最低价、收盘价、成交量
我将主要通过符号和日期查询数据。例如,给我日期时间订购的 2013 年 1 月 1 日到 2013 年 1 月 31 日之间 AAPL 的所有数据。cassandra 查询的建议是查询整个列。因此,您可以使用 Open、High、Low、Close、Volume 键创建五行。每个符号和分钟都有自己的列。例如“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 亿列数。
我得到了吗?你怎么看这个问题?如何解决?
谢谢!
最好的,马耳他