我正在寻找一种将时间特定数据存储在cassandra中的好方法。在cassandra中存储时间特定数据
每个条目可以看起来像(start_time, value)
。稍后,我想检索当前值。
检索当前值的逻辑如下。
查找与
start_time<=current_time
的所有行。然后从第一步中获得的行中找到最大值为
start_time
的值。
PS: - 编辑的问题,使之更加明确
我正在寻找一种将时间特定数据存储在cassandra中的好方法。在cassandra中存储时间特定数据
每个条目可以看起来像(start_time, value)
。稍后,我想检索当前值。
检索当前值的逻辑如下。
查找与start_time<=current_time
的所有行。
然后从第一步中获得的行中找到最大值为start_time
的值。
PS: - 编辑的问题,使之更加明确
创建两个单独的表象下面这样:
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);
现在在当前值表中,您的数据将被置顶,每当您选择时您将获得最新值。
如果我输入未来的时间戳,它会起作用吗? – Ravi
@Ravi current_value表将保留最后一个插入 –
我认为在这里数据表将不允许像start_time <= current_time这样的查询。 –
确切的要求是不可能的。但是我们可以用更多的专栏来贴近它。
首先,为了能够使用<=
运算符,您的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 < = 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;
这是您要执行的一个查询吗?列出您想要执行的所有类型的查询并为其建模 –
是的,这是我想要执行的唯一查询。 – Ravi
你需要以前的所有数据吗? –