在本文中,我们将介绍如何基于分区访问数据,以及如何将数据唯一地存储在集群中。让我们一一讨论。
先决条件——数据分发
表分区:
在表分区中,可以根据分区键分布数据。如果您没有指定任何分区键,那么可能会丢失数据。并且很难按要求访问数据。
例子 :
让我们考虑一下您的要求是否要按名字查询用户数据。现在,首先,您必须创建一个表,其中分区键的作用非常重要。
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 |