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

卡桑德拉:对时间序列数据时间戳的范围查询

夏侯臻
2023-03-14

我正在尝试评估Cassandra DB在存储和检索不同通道的时间序列数据方面的性能。

数据以文件格式记录,最大记录速率为8个样本/秒,每个样本都有一个以毫秒为单位的时间戳。给定时间记录的通道数可能会有所不同。

受以下链接的启发,我使用时间序列数据建模入门创建了以下表:

创建表uhhdata ( ch_idx int,date timestamp,dt timestamp,val float,PRIMARY KEY ((ch_idx,date),dt));

其中,分区键由通道号(ch_idx int)和日期时间戳组成,它们不存储日期,也不存储时间戳详细信息,dt 是小于秒分辨率的记录的时间戳。

我有两个问题:1、在将2500000条记录写入此表并运行查询后,从UHdatalimit 10000000中选择*;我收到以下超时错误:

请求没有在rpc_timeout内完成。

对于这个数量的记录,c驱动程序只返回NULL:boost::shared _ ptr result = future . get()。结果;

if(!result)标准::cout

如果对100,000执行此操作,它会在22秒后返回。对于这样的大型查询,我如何检索所有记录?我看到一个帖子cassandra获得了时间范围内的所有记录,但是,我不知道如何应用于我的情况,因为我需要获得所有记录,而不是其中的一些?

2-如果在dt timstamp上执行如下范围查询,则返回的查询不会检查由interval指定的时间间隔,并且与时间上限和下限无关:

可以看出,查询返回的记录大于时间上限 '2014-04-04 01:00:10':

cqlsh: uhhkeyspace2

ch_idx | date | dt | val

- - - -

  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:00GMT Daylight Time |  -5
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:01GMT Daylight Time |  44
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:02GMT Daylight Time |  83
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:03GMT Daylight Time |  99
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:04GMT Daylight Time |  89
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:05GMT Daylight Time |  55
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:06GMT Daylight Time |   5
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:07GMT Daylight Time | -44
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:08GMT Daylight Time | -83
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:09GMT Daylight Time | -99
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:10GMT Daylight Time | -89
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:11GMT Daylight Time | -55
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:12GMT Daylight Time |  -5
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:13GMT Daylight Time |  44
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:14GMT Daylight Time |  83
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:15GMT Daylight Time |  99
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:16GMT Daylight Time |  89
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:17GMT Daylight Time |  55
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:18GMT Daylight Time |   5
  1 | 2012-04-04 01:00:00GMT Daylight Time | 2012-04-04 01:00:19GMT Daylight Time | -44

(20行)

为什么不应用时间戳限制条件?我怎样才能解决这个问题?

谢谢,阿明

共有1个答案

禄俊逸
2023-03-14

我没看到任何问题。dt列中的所有时间戳都来自2012-04-04,您的条件是dt

 类似资料:
  • 在你否决之前,我想声明,我看了所有类似的问题,但我仍然得到可怕的“主键列不能被限制”错误。 下面是我的表结构: 谢谢,德尼兹

  • 我每天都在cassandra中存储时间序列数据。我们希望每天归档/清除超过2天的数据。我们正在使用Hector API来存储数据。有人能建议我每天删除超过2天的cassandra数据的方法吗?对cassandra行使用TTL方法是不可行的,因为删除数据的天数是可配置的。现在表格中没有时间戳列。我们计划添加时间戳列。但问题是,时间戳不能单独用于where子句,因为这个新列不是主键的一部分。请提供您的

  • 全能的开发者们。我在Spark中运行一些基本的分析,在这里我查询多节点Cassandra。我正在运行的代码以及我正在处理的一些非链接代码是: Spark的版本是1.6.0,Cassandra v3。0.10,连接器也是1.6.0。键空间有,表有5列,实际上只有一行。如您所见,有两个节点(OracleVM中制作的虚拟Macine)。 我的问题是,当我测量从spark到cassandra的查询时间时,

  • 我正在尝试使用Cassandra来存储来自一些传感器的数据。我读了很多关于Cassandra的时间序列数据模型的文章。我从时间序列数据建模入门开始,“时间序列模式2”看起来是最好的方法。所以我创建了一个复制因子为2的键空间和一个这样的表 其中是唯一的设备ID,是一天(例如2017-08-30),是时间戳。 我的查询是 如您所见,我需要从多天中检索数据,这意味着在我的集群中读取多个分区。在我看来,查

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。