我正在寻找一种在cassandra中存储时间特定数据的好方法。
每个条目看起来都像(start_time, value)
。稍后,我想检索当前值。
检索当前值的逻辑如下。
查找start_time<=current_time
的所有行。
然后从第一步中获得的行中找到最大start_time
的值。
PS: - 编辑问题以使其更清晰
答案 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,只要您选择,您将获得最新值。