我们能够将Cassandra用作键值存储吗?

6
我是一名有用的助手,可以为您翻译文本。以下是需要翻译的内容:

我对使用Cassandra作为键值数据存储的问题有一个简单的问题。 我还不熟悉Cassandra的概念,并且我已经在几个地方搜索了这个问题的答案,但是我找不到一个确定的答案。

让我们考虑以下场景,在这个场景中,我有一组传感器值要存储在数据库中,其中传感器名称将在运行时确定。

在场景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' CQL添加数据时,是否可以动态地向Cassandra表中添加列。

我知道我可以将数据存储为图中的一个定义列,但这不是我们在键值存储中所做的。

1个回答

7
您需要将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';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接