📜  Cassandra 中的表分区

📅  最后修改于: 2021-09-10 02:03:41             🧑  作者: 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