时间序列的 Cassandra 数据模型

Posted

技术标签:

【中文标题】时间序列的 Cassandra 数据模型【英文标题】:Cassandra data model for time series 【发布时间】:2013-04-17 23:16:39 【问题描述】:

我正在研究用于存储(我是 Cassandra 新手)。 我有两个应用程序:盘中股票数据和传感器数据。

股票数据将以一分钟的时间分辨率保存。 七个数据字段构建一个时间框架: 品种、日期时间、开盘价、最高价、最低价、收盘价、成交量

我将主要通过符号和日期来查询数据。例如给我日期时间订购的 2013 年 1 月 1 日到 2013 年 1 月 31 日之间 AAPL 的所有数据。 cassandra 查询的建议是查询整个列。因此,您可以使用 Open、High、Low、Close、Volume 键创建五行。每个符号和分钟都有自己的列。例如。 “AAPL:2013-01-04T130400Z”。 这将产生一个包含五行和 n*NT 列的表格,其中 n = 符号数,nT = 分钟数。 大多数时候我会查询日期范围。 IE。一天中的所有分钟。所以我可以重新排列数据,使其具有名为“AAPL:2013-01-04”的列和行:OpenT130400Z、HighT130400Z、LowT130400Z、CloseT130400Z、VolumeT130400Z。 这将产生一个包含 n*nD 列(n:符号数,nD:天数)和 5*nM 行(nM:每天的分钟数/条目数)的表。

总结一下:我有列,其中包含一个符号一整天的信息。

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

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

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

谢谢!

最好, 马耳他

【问题讨论】:

【参考方案1】:

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

行键:

列格式:

名称:当前日期时间,精确到一分钟

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]

【讨论】:

以上是关于时间序列的 Cassandra 数据模型的主要内容,如果未能解决你的问题,请参考以下文章

用于汇总时间序列数据的 Cassandra 数据模型

难以定义 Cassandra 数据模型

Cassandra 数据模型

Cassandra 非规范化数据模型

Cassandra 学习三 数据模型

Cassandra 数据模型设计,根据你的查询来制定设计——反范式设计本质:空间换时间