我们可以使用Cassandra作为键值存储吗?

时间:2018-03-14 14:23:25

标签: cassandra cql cassandra-3.0 cql3 key-value-store

我有一个关于使用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中已定义列中的一个映射中,但这不是我们对键值存储的处理。

1 个答案:

答案 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';