📜  Cassandra中的表分区

📅  最后修改于: 2021-08-24 16:36:00             🧑  作者: Mango

在本文中,我们将介绍如何在分区的基础上进行数据访问以及如何将数据唯一地存储在集群中。让我们一一讨论。

先决条件—数据分发

表分区:
在表分区中,可以根据分区键来分配数据。如果您未指定任何分区键,则可能会丢失数据。并且将难以按要求访问数据。

例子 :
让我们考虑一下您的要求是否要通过名字查询用户数据。现在,首先,您必须创建一个表,其中分区键的作用非常重要。

CREATE TABLE User_data_by_first_name
(
Usr_id UUID,
first_name text,
last_name text,
primary key (first_name)
);

让我们为上面创建的表插入一些数据。

Insert into User_data_by_id(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'A');
Insert into User_data_by_id(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'A');
Insert into User_data_by_id(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'B');

现在,如果要读取数据,请使用以下cqlsh查询。

select * from User_data_by_id;

输出 :

first_name last_name Usr_id
Ashish B 8a71a441-ebee-48e6-861e-cb097570b09b

在上面的示例中,如果已通过名字指定了它的分区键,则不建议将唯一的名字指定为分区键。否则,可能无法唯一标识您的数据,并且如果您有多个具有相同名称的条目,则数据将丢失。

现在,要解决此问题,请指定Usr_id和first_name作为分区键。

CREATE TABLE User_data_by_first_name_modify
(
Usr_id UUID,
first_name text,
last_name text,
primary key (first_name, Usr_id)
);

现在,插入与您要为User_data_by_first_name插入的数据相同的数据。

Insert into User_data_by_first_name_modify(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'A');
Insert into User_data_by_first_name_modify(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'A');
Insert into User_data_by_first_name_modify(Usr_id, first_name, last_name) 
values(uuid(), 'Ashish', 'B');

现在,如果您将读取数据,那么它将被唯一标识,并且您的数据也不会丢失。

select * from User_data_by_first_name_modify;

输出 :

first_name Usr_id last_name
Ashish 9d0bd000-d822-41f4-9a0b-ee5a3f100dbf B
Ashish ea0fb4a4-af2e-4eaf-8bf6-f8e894416206 A
Ashish f1fcbdd0-5e6e-4dc7-83d7-2708db806668 A