当前位置: 首页 > 知识库问答 >
问题:

时间序列的Cassandra数据模型

云建木
2023-03-14

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

库存数据将以一分钟的时间分辨率保存。七个数据字段构建一个时间框架:符号、日期时间、开盘、高位、低位、收盘、成交量

我将主要通过符号和日期来查询数据。例如,给我2013年1月1日到2013年1月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分钟的股票数据更细粒度(假设我必须以微秒的分辨率节省时间步长),我该如何处理?如果我使用列来保存传感器通道和小时的组合,以及自最后一个小时以来的微秒行,这将导致360000000行和n*nH列(n:传感器数量,nH:小时数)。我无法使用上个小时以来的微秒来计算列,因为我有36亿点,这比允许的20亿列的数量高。

我拿到了吗?你怎么看待这个问题?怎么解决?

非常感谢。

最好的,麦芽

共有1个答案

谷梁宏恺
2023-03-14

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

行键:

列格式:

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

值:开盘价、最高价、最低价、收盘价、成交量的复合柱

所以你会有这样的东西

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]

这将在一年内为您提供大约50万列,因此在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]

 类似资料:
  • 我正在开发一个Cassandra数据模型来存储用户上传的记录。 潜在的问题是,一些用户可能在5分钟内上传50-100k行,这可能导致分区键(user_id)的“热点”。(如果每个分区超过10k行,建议重新考虑数据模型)。 如何避免在短时间内一个分区键上有太多记录? 我尝试使用Datastax的时间序列建议,但即使我有年、月、日、小时列,热点仍然可能出现。 使用案例包括: 按user_id获取所有上

  • 或者,如果有一个更好的方式或存储事件的时间序列数据。

  • 编辑:我已经更改了模式,以便做出一些澄清。 每天都会为当天创建一个新表。所以一个表只包含一天的日志。 我的查询条件如下。 查询特定用户在特定日期(日期而不是时间)的所有日志。 因此原因、项目、价格和计数根本不会用作查询的提示或条件。

  • 任何一个都可以,要求数据是一个字符串化的JSON对象。我的查询将返回用户在给定时间范围内的所有数据。哪种模式更有意义,或者有更好的方法来解决这个问题?

  • 我将我的数据存储在卡珊德拉·NoSQL数据库中,模式如下: 然后我使用。我希望数据是按时间序列排列的,第一天确实如此,但今天情况发生了变化。 我认为数据库忽略了日期,而只关心时间。 知道怎么解决这个问题吗?

  • 我们目前正在调查卡桑德拉作为大型时间序列系统的数据库。 我已经通读了https://academy . datas tax . com/resources/getting-started-time-series-data-modeling关于Cassandra中时间序列数据建模的内容。 我们有许多气象站的高速时间序列数据。每个气象站都有许多“传感器”,每个传感器收集三个指标:温度、湿度和光照。 我