在cassandra中存储特定时间的数据

时间:2017-08-24 14:38:03

标签: cassandra cassandra-2.0 nosql

我正在寻找一种在cassandra中存储时间特定数据的好方法。

每个条目看起来都像(start_time, value)。稍后,我想检索当前值。

检索当前值的逻辑如下。

  1. 查找start_time<=current_time的所有行。

  2. 然后从第一步中获得的行中找到最大start_time的值。

  3. PS: - 编辑问题以使其更清晰

2 个答案:

答案 0 :(得分:1)

无法确切要求。但是我们可以再增加一栏了。

首先,为了能够使用<=运算符,您的start_time列必须是表格的聚类键。

然后,您需要一个不同的分区键。您可以选择固定值,但是当分区有太多行时,它可能会带来问题。那么你最好使用类似start_time的年份或月份的东西。

CREATE TABLE time_specific_table (
  year bigint,
  start_time timestamp,
  value text,
  PRIMARY KEY((year), start_time)
) WITH CLUSTERING ORDER BY (start_time DESC);

问题是,当您查询表时,您需要知道分区键的值:

  

使用start_time&lt; = current_time

查找所有行
SELECT * FROM time_specific_table
WHERE year = :year AND start_time <= :time;
  

选择最大start_time值

SELECT * FROM time_specific_table
WHERE year = :year LIMIT 1;

答案 1 :(得分:0)

创建两个单独的表格,如下所示:

CREATE TABLE data (
    start_time timestamp,
    value int,
    PRIMARY KEY(start_time, value)
);

CREATE TABLE current_value (
    partition int PRIMARY KEY,
    value int
);

现在你必须在两个表中插入数据,将数据插入第二个表使用静态值,如1

INSERT INTO current_value(partition, value) VALUES(1, 10);

现在在当前值表中,您的数据将是upsert,只要您选择,您将获得最新值。