📜  密钥在 Cassandra 中的作用

📅  最后修改于: 2021-09-08 16:18:44             🧑  作者: Mango

在本文中,我们将讨论为什么键很重要以及它们如何工作以及与关系数据库不同。基本上,键用于将数据分组和组织到数据库中的列和行中,让我们来看看。

    Cassandra 中有许多分配键可用。
    1. Simple Primary key
    2. Composite key
    3. Using a compound primary key 

    让我们一一讨论分区键的概念。

    1. 简单主键:
    在基本主键中,一列用作列名作为分区键。在这种情况下,主键仅包含分区键。从表中检索数据时只能指定主键。

    CREATE KEYSPACE Employee
    WITH REPLICATION = { 'class' : 'SimpleStrategy', 
                         'replication_factor' : 1 };
    USE Employee;
    CREATE TABLE Employee_info ( 
    Employee_id UUID PRIMARY KEY, 
    Emp_name text, 
    Emp_domain text 
    );
    

    2.复合键:
    在 Cassandra 复合分区键中,我们可以在键的帮助下用于更多排序的行。我们举个例子来理解。下面给定的 Employee_name 是主键的一部分,称为 Employee_info 表的复合分区键。

    CREATE TABLE Employee_info
    (
    Employee_id int,
    Employee_name text,
    Employee_domain text,
    Employee_add text
    PRIMARY KEY ((Emplyee_id, Employee_name), Employee_domain) 
    ); 

    在上面给出的表中 Employee_id 和 Employee_name 用于复合分区键。这里 Employee_domain 主键中的额外列返回排序结果。让我们看一个场景,其中聚类列更有帮助。

    INSERT INTO Employee_info(Employee_id, Employee_name, 
                               Employee_domain, Employee_add) 
            VALUES (1, ‘Ashish’, ‘A’, ‘Delhi’);
    INSERT INTO Employee_info(Employee_id, Employee_name, 
                              Employee_domain, Employee_add) 
           VALUES (1, ‘Ashish’, ‘B’, ‘Mumbai’);
    INSERT INTO Employee_info(Employee_id, Employee_name, 
                              Employee_domain, Employee_add ) 
           VALUES (2, ‘Ashish’, ‘C’, ‘Hyd’); 
    Select * 
    from Employee_info; 

    输出:

    Employee_id Employee_name Employee_domain Employee_add
    1 Ashish A Delhi
    1 Ashish B Mumbai
    2 Ashish C Hyd


    它显示了在聚类键列的帮助下,我们可以以排序的方式存储数据,我们实际上期望它是我们在 Employee_domain 列的帮助下按排序顺序返回的确切结果。

    3. 使用复合主键:
    使用复合主键创建可用于查询和返回排序结果的多个列。
    让我们以 Employee_info 表为例,我们将对数据进行反规范化。要创建具有复合主键的表,请使用两列或更多列作为主键。
    让我们举一个例子,它使用一个附加子句 WITH CLUSTERING ORDER BY 按降序对 Employee_points 进行排序。

    CREATE TABLE Employee.Employee_info ( 
    Employee_name text, 
    Employee_points int, 
    Employee_id UUID,  
    PRIMARY KEY (Employee_name, Employee_points)
    ); 

    让我们举一个例子,它使用一个附加子句 WITH CLUSTERING ORDER BY 按降序对 Employee_points 进行排序。

    CREATE TABLE Employee.Employee_info ( 
    Employee_name text, 
    Employee_points int, 
    Employee_id int,  
    PRIMARY KEY (Employee_name, Employee_points)
    ) WITH CLUSTERING ORDER BY (Employee_points DESC); 

    现在,让我们将数据插入表 Employee_info 并使用以下 CQL 查询。

    INSERT INTO Employee_info (Employee_name, Employee_points, 
                                                   Employee_id) 
            VALUES (‘Ashish’, 90, 1);
    INSERT INTO Employee_info (Employee_name, Employee_points, 
                                              Employee_id ) 
           VALUES (‘Rana’, 95, 2);
    INSERT INTO Employee_info(Employee_name, Employee_points, 
                                             Employee_id) 
           VALUES (‘Ashish’, 85, 3); 
    Select * 
    from Employee_info; 

    输出:

    Employee_name Employee_points Employee_id
    Rana 95 2
    Ashish 90 1
    Ashish 85 3