3

我正在研究用于存储时间序列的 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 亿列数。

我得到了吗?你怎么看这个问题?如何解决?

谢谢!

最好的,马耳他

4

1 回答 1

0

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

行键:

栏目格式:

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

Value:Open,High,Low,Close,Volume的复合列

所以你会有类似的东西

苹果 = [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]

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

苹果: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]

于 2013-05-02T22:58:17.840 回答