我有一个关于使用Cassandra作为键值数据存储的简单问题。 我对Casandra的概念不熟悉,我已经在几个地方寻找了这个问题的答案,但是,我找不到一个可靠的答案。
让我们考虑以下场景:我将传感器值集存储在数据库中,传感器名称将在运行时确定。
在方案1中,我得到以下值
{"id": "001", "sensor1" : 25, "sensor2":15}
在方案2中,我得到以下值,
{"id": "002", "sensor1" : 25, "sensor3":30}
因此,在这些情况下,如果我使用AWS Dynamodb等键值数据存储来存储数据,那么它看起来就像下面这样,
+-----+---------+---------+---------+
| ID | sensor1 | sensor2 | sensor3 |
+-----+---------+---------+---------+
| 001 | 25 | 15 | |
| 002 | 25 | | 30 |
+-----+---------+---------+---------+
但是,我的问题是我们可以用Cassandra完成同样的事情,因为它不是完整的键值存储。
在cassandra中,我需要在开始将数据持久化之前定义表。所以在这种情况下我需要知道我之前的所有传感器名称。
我不确定在通过' insert'添加数据时是否可以动态地向Cassandra表添加列。 CQL。
我知道我可以将数据存储在cassandra中已定义列中的一个映射中,但这不是我们对键值存储的处理。
答案 0 :(得分:5)
您需要将ID
作为分区键,将传感器名称作为群集列,例如:
create table sensors (
id int,
sensor text,
value int,
primary key(id, sensor));
然后您可以进行这样的查询(选择给定测量的所有数据):
select * from sensors where id = 001;
或他(选择给定测量和传感器的数据):
select * from sensors where id = 001 and sensor = 'sensor1';