我是Cassandra的新手,我想知道如何解决这个传感器数据问题:
每个传感器都有一个名称和描述,以及多个时间戳,每个时间戳都有一个值。 在JSON中它看起来像这样:
[{
"sensor" : "Sensor1",
"description" : "first sensor",
"timeseries" : {
1200001 : 2,
1200002 : 5,
1200006 : 1,
1200009 : 3,
1200011 : 7,
1200012 : 9 }
}]
如何使用CQL保存? 我试过这样的事情:
CREATE TABLE sensordata (
sensor text,
description text,
time int,
value int,
PRIMARY KEY (sensor, time)
);
但是这会保存每个时间戳的描述。如果我将描述添加为群集密钥,我总是必须在编写时提供它。 我的写作应该是这样的:
INSERT INTO sensordata (sensor, description) VALUES ('Sensor1', 'first sensor');
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200001, 2);
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200002, 5);
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200006, 1);
可能我应该只使用两张桌子?
CREATE TABLE sensormetadata (
sensor text,
description text,
PRIMARY KEY (sensor)
);
CREATE TABLE sensordata (
sensor text,
time int,
value int,
PRIMARY KEY (sensor, time)
);
最后,我想查询一个特定的传感器(在规定的时间范围内)。 另一个查询将是过去120秒内的所有传感器数据。
SELECT description, time, value from sensordata WHERE sensor='Sensor1';
SELECT description, time, value from sensordata WHERE sensor='Sensor1' AND time > 1200000 AND time < 1250000;
SELECT sensor, description, time, value from sensordata WHERE time > 1200000;
谢谢!
最佳, 马尔特
答案 0 :(得分:2)
您可以使用第一个架构,但将description
列设为静态:
CREATE TABLE sensordata (
sensor text,
description text static,
time int,
value int,
PRIMARY KEY (sensor, time)
);
这实质上意味着描述将按每个分区存储一次(或每个传感器ID一次),但会出现在每一行中。静态列已添加到2.0.6中,您可以在此处阅读有关它们的更多信息:http://www.datastax.com/dev/blog/cql-in-2-0-6