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

gbi*_*ids 3 cql cassandra key-value-store cql3 cassandra-3.0

我有一个关于使用Cassandra作为键值数据存储的简单问题.我对Casandra概念不熟悉,我已经在几个地方寻找了这个问题的答案,但是,我找不到一个可靠的答案.

让我们考虑以下场景,其中我将传感器值集存储在数据库中,其中传感器名称将在运行时确定.

在方案1中,我得到以下值

{"id": "001", "sensor1" : 25, "sensor2":15}
Run Code Online (Sandbox Code Playgroud)

在方案2中,我得到以下值,

{"id": "002", "sensor1" : 25, "sensor3":30}
Run Code Online (Sandbox Code Playgroud)

因此,在这些情况下,如果我使用AWS Dynamodb等键值数据存储来存储数据,那么它看起来像下面的内容,

+-----+---------+---------+---------+
| ID  | sensor1 | sensor2 | sensor3 |
+-----+---------+---------+---------+
| 001 | 25      | 15      |         |
| 002 | 25      |         | 30      |
+-----+---------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是我们可以用Cassandra完成同样的事情,因为它不是完整的键值存储.

在cassandra中,我需要在开始将数据持久化之前定义表.所以在这种情况下我需要知道我之前的所有传感器名称.

当我们通过'insert'cql添加数据时,我不确定是否可以动态地向Cassandra表添加列.

我知道我可以将数据存储在cassandra中定义列之一的地图中,但这不是我们对键值存储的处理方式.

Ale*_*Ott 5

您需要将ID分区键和传感器名称作为聚类列,例如:

create table sensors (
  id int,
  sensor text,
  value int,
  primary key(id, sensor));
Run Code Online (Sandbox Code Playgroud)

那么你可以像这样进行查询(选择给定测量的所有数据):

select * from sensors where id = 001;
Run Code Online (Sandbox Code Playgroud)

或他的(为给定的测量和传感器选择数据):

select * from sensors where id = 001 and sensor = 'sensor1';
Run Code Online (Sandbox Code Playgroud)