Cassandra中的主键是否可以包含集合列?
例:
CREATE TABLE person (
first_name text,
emails set<text>,
description text
PRIMARY KEY (first_name, emails)
);
Run Code Online (Sandbox Code Playgroud)
The*_*heo 14
集合类型不能是主键的一部分,计数器类型也不能.您可以自己轻松测试,但原因可能并不明显.
集合,列表,地图是存储模型之上的黑客(但我并不是以负面的方式).集合实际上只是具有相同密钥前缀的多个列.要成为主键的一部分,值必须是标量,而集合类型则不是.
小智 9
已经有一段时间了,但是当你在主键中寻找使用地图时,这是在谷歌的第一页,我认为值得更新它.
Cassandra 现在允许(我认为从2.1开始)在主键中使用它被冻结的集合.
甲冷冻值序列化的多个部件成一个单一的值.非冻结类型允许更新单个字段.Cassandra将冻结类型的值视为blob.必须覆盖整个值.
通过冻结,集合变得基本上不可变,不允许就地修改,因此适合于主键.
以下是使用冻结列表的示例.
CREATE TABLE test_frozen (
app_id varchar,
kind varchar,
properties frozen <list<text>>,
PRIMARY KEY ((app_id, kind), properties));
Run Code Online (Sandbox Code Playgroud)
从2.1开始,Cassandra还允许在map,set或list类型的列上创建索引 - 尽管这不一定是个好主意.
| 归档时间: |
|
| 查看次数: |
5104 次 |
| 最近记录: |