bra*_*orm 485 database cql cassandra
我一直在阅读网络上的文章,以了解以下key类型之间的差异.但这对我来说似乎很难掌握.实例肯定有助于更好地理解.
primary key,
partition key,
composite key
clustering key
Run Code Online (Sandbox Code Playgroud)
Car*_*ini 1101
围绕这个有很多困惑,我会尽量让它变得简单.
主键是一般概念,用于指示用于从表中检索数据的一个或多个列.
主键可以是SIMPLE,甚至可以内联声明:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Run Code Online (Sandbox Code Playgroud)
这意味着它是由一个列组成的.
但主键也可以是COMPOSITE(又名COMPOUND),由更多列生成.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
Run Code Online (Sandbox Code Playgroud)
在COMPOSITE主键的情况下,键的"第一部分"称为PARTITION KEY(在此示例中,key_part_one是分区键),键的第二部分是CLUSTERING KEY(在此示例中为key_part_two)
请注意,分区和群集键都可以由更多列创建,具体方法如下:
create table stackoverflow_multiple (
k_part_one text,
k_part_two int,
k_clust_one text,
k_clust_two int,
k_clust_three uuid,
data text,
PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)
);
Run Code Online (Sandbox Code Playgroud)
这些名字背后......
进一步的使用信息:DATASTAX文件
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
Run Code Online (Sandbox Code Playgroud)
表格内容
key | data
----+------
han | solo
Run Code Online (Sandbox Code Playgroud)
COMPOSITE/COMPOUND KEY可以检索"宽行"(即,您可以只通过分区键进行查询,即使您已定义了聚类键)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
Run Code Online (Sandbox Code Playgroud)
表格内容
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Run Code Online (Sandbox Code Playgroud)
但您可以使用所有密钥(分区和群集)查询...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
Run Code Online (Sandbox Code Playgroud)
查询输出
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
Run Code Online (Sandbox Code Playgroud)
重要说明:分区键是使用a执行查询所需的最小说明符where clause.如果您有复合分区键,如下所示
例如: PRIMARY KEY((col1, col2), col10, col4))
您只能通过至少传递col1和col2来执行查询,这些是定义分区键的2列.要进行查询的"常规"规则是您必须至少传递所有分区键列,然后您可以按照它们设置的顺序可选地添加每个群集键.
所以有效的查询是(不包括二级索引)
无效:
希望这可以帮助.
Sto*_*ica 111
添加redux答案作为可接受的答案是很长的.术语"行"和"列"在CQL的上下文中使用,而不是如何实际实现Cassandra.
例子:
PRIMARY KEY (a):分区键是a.PRIMARY KEY (a, b):分区键是a,聚类键是b.PRIMARY KEY ((a, b)):复合分区键是(a, b).PRIMARY KEY (a, b, c):分区键是a,复合群集键是(b, c).PRIMARY KEY ((a, b), c):复合分区键是(a, b),聚类键是c.PRIMARY KEY ((a, b), c, d):复合分区键是(a, b),复合聚类键是(c, d).Big*_*Guy 14
在cassandra中,主键,分区键,复合键,聚类键之间的区别总是会产生一些混乱.所以我将在下面解释并与其他人联系起来.我们使用CQL(Cassandra查询语言)进行Cassandra数据库访问.注意: - 答案是根据Cassandra的更新版本. 首要的关键 :-
CREATE TABLE Cass (
id int PRIMARY KEY,
name text
);
Run Code Online (Sandbox Code Playgroud)
Create Table Cass (
id int,
name text,
PRIMARY KEY(id)
);
Run Code Online (Sandbox Code Playgroud)
在CQL中,为PRIMARY KEY定义列的顺序很重要.密钥的第一列称为分区密钥,其具有共享相同分区密钥(实际上甚至跨表)的所有行存储在同一物理节点上的属性.此外,对于给定表共享相同分区键的行上的插入/更新/删除是以原子方式单独执行的.请注意,可以使用复合分区键,即由多列组成的分区键,使用一组额外的括号来定义哪些列构成分区键.
分区和集群 PRIMARY KEY定义由两部分组成:分区键和聚类列.第一部分映射到存储引擎行键,而第二部分用于对一行中的列进行分组.
CREATE TABLE device_check (
device_id int,
checked_at timestamp,
is_power boolean,
is_locked boolean,
PRIMARY KEY (device_id, checked_at)
);
Run Code Online (Sandbox Code Playgroud)
这里device_id是分区键,checked_at是cluster_key.
我们可以有多个集群密钥以及依赖于声明的分区密钥.
主键:由分区键[和可选的集群键(或列)组成]
分区键:分区键的哈希值用于确定集群中的特定节点以存储数据
集群密钥:用于对每个分区(或负责节点及其副本)中的数据进行排序
复合主键:如上所述,聚类键在主键中是可选的.如果没有提到它们,它就是一个简单的主键.如果提到了聚类键,则它是复合主键.
复合分区键:仅使用一列作为分区键,可能会导致广泛的行问题(取决于用例/数据建模).因此,分区键有时被指定为多个列的组合.
关于哪一个是强制性的混淆,哪一个可以在查询中跳过等等,试图将 Cassandra想象成一个巨大的HashMap有帮助.因此,在HashMap中,如果没有Key,则无法检索值.
这里,分区键起到该键的作用.因此每个查询都需要指定它们.没有它,Cassandra将不知道要搜索哪个节点.
该集群键(列,哪些是可选的)有助于进一步缩小您的查询搜索卡桑德拉发现后出特定节点(和它的复制品),负责特定的分区键.
简而言之:
分区键是什么,但鉴定为一排,即识别大部分的时间是在单个列(称为主键)有时多个列的组合(称为复合分区键)。
集群键不过是Indexing & Sorting。集群键取决于几件事:
除了主键列之外,您在 where 子句中使用了哪些列。
如果您有非常大的记录,那么我可以将日期分开以便于管理。例如,我有一个县 100 万人口记录的数据。所以为了便于管理,我根据状态和密码等对数据进行聚类。
| 归档时间: |
|
| 查看次数: |
172380 次 |
| 最近记录: |