在本文中,我们将讨论 Cassandra 中 MAP Collection 上的二级索引的概述,然后将实施该练习并了解其实际工作原理,最后将总结二级索引对 MAP Collection 的重要性。让我们一一讨论。
先决条件——
- Apache Cassandra 中的索引概念
- Apache Cassandra 中的集合数据类型
概述 :
在 Cassandra 中在 MAP 集合上创建二级索引非常有用。因此,在这里您将看到在集合上创建索引的实际用例,因为它使搜索和查询数据非常高效和快速。因此,如果您想根据关键字进行搜索,那么在搜索和查询数据时,您可以将 CONTAINS KEY 关键字用于 MAP 集合数据类型中的特定关键字。在 MAP 集合中会存储数据键值对,我们将使用 KEY 来搜索数据。让我们借助示例来理解整个概念。
句法 :
在这里,您将看到如何在集合上创建索引的语法部分。您可以使用下面给出的命令,如下所示。
CREATE INDEX ON (KEYS)
在这里,您将看到 WHERE 子句部分的语法,您将在其中使用 CONTAINS 关键字来搜索 MAP 集合中的特定值。
WHERE CONTAINS KEY
例子 :
假设您有现有的键空间,即 cluster1,然后首先我们将使用 CQL 命令创建一个 user_data 表,如下所示。
第 1 步:创建表 -user_data –
use cluster1;
create table user_data
(
user_id varchar,
user_first_name varchar,
user_last_name varchar,
company varchar,
user_tags map,
primary key(user_id)
);
第 2 步:在 user_tags 上创建索引 –
CREATE INDEX ON user_data (KEYS(user_tags))
第 3 步:插入数据 –
insert into user_data(user_id, user_first_name, user_last_name, company, user_tags)
values('Ashish01','Ashish','Rana','abc',{'GFG':'Geeks for Geeks','HTML':'HyperText Markup Language'});
insert into user_data(user_id, user_first_name, user_last_name, company, user_tags)
values('Ashish02','Ayush','NA','abc',{'GFG':'Geeks for Geeks','IDK':'I Do not Know'});
insert into user_data(user_id, user_first_name, user_last_name, company, user_tags)
values('Ashish03','Ayushi','NA','abc',{'FYI':'For Your Information','IDK':'I Do not Know'});
第 4 步:验证和读取数据 –
select * from user_data;
第 5 步:输出 –
user_id | company | user_first_name | user_last_name | user_tags |
---|---|---|---|---|
Ashish03 | abc | Ayushi | NA | {‘FYI’: ‘For Your Information’, ‘IDK’: ‘I Do not Know’} |
Ashish02 | abc | Ayush | NA | {‘GFG’: ‘Geeks for Geeks’, ‘IDK’: ‘I Do not Know’} |
Ashish01 | abc | Ashish | Rana | {‘GFG’: ‘Geeks for Geeks’, ‘HTML’: ‘HyperText Markup Language’} |
第 6 步:根据特定关键字进行搜索 –
select * from user_data where user_tags CONTAINS KEY 'GFG';
第 7 步:输出 –
user_id | company | user_first_name | user_last_name | user_tags |
---|---|---|---|---|
Ashish02 | abc | Ayush | NA | {‘GFG‘: ‘Geeks for Geeks’, ‘IDK’: ‘I Do not Know’} |
Ashish01 | abc | Ashish | Rana | {‘GFG‘: ‘Geeks for Geeks’, ‘HTML’: ‘HyperText Markup Language’} |