写点什么

复杂查询 so easy ,GaussDB(for Cassandra) 推 Lucene 引擎全新解决方案

  • 2022 年 7 月 08 日
  • 本文字数:2296 字

    阅读完需:约 8 分钟

复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案

本文分享自华为云社区《来了!GaussDB(for Cassandra)新特性亮相》,作者:GaussDB 数据库 。


今天,华为云 GaussDB(for Cassandra)携 Lucene 引擎全新解决方案来啦!


当前,互联网、大数据飞速发展,数据量呈爆发式增长,在高并发、高可用、高扩展的业务需求推动下,NoSQL 数据库成为了越来越多业务场景的刚需。但在查询方面,传统的 NoSQL 却有一定的局限性,严格来说,像开源 MongoDB、Cassandra、Hbase 等都不具备海量数据的多维查询、文本检索、统计分析等能力。多数企业仍然在寻求一套更完美的 NoSQL 解决方案。


华为云原生多模数据库 GaussDB NoSQL 拥有强大的生态体系,支持键值、宽表、文档、时序四种引擎接口。其中,宽表引擎接口 GaussDB(for Cassandra)现已发布 Lucene 二级索引功能,既具备 NoSQL 的优势,又能支持多种复杂查询场景,全面提升用户在海量数据场景下的查询体验,凭实力宠粉!相信大家一定有很多疑问,GaussDB(for Cassandra)是什么?二级索引如何使用?Lucene 二级索引又有哪些区别?别着急,接下来让我们一一解读。


什么是 GaussDB(for Cassandra)?


GaussDB(for Cassandra)是一款华为自研、采用计算存储分离架构的分布式云数据库,在高性能、高可用、高可靠、高安全、可弹性扩缩容的基础上,提供了一键部署、备份恢复、监控告警等服务能力;并高度兼容开源 Cassandra 接口,提供高读写性能。当前已经广泛应用于 IoT、气象、互联网、游戏等诸多领域。

什么是二级索引?


我们先来了解下索引的概念。索引是为了加快数据检索速度而创建的一种存储结构,是一种以空间换时间的设计思想。作用可以理解为书的目录,通过目录可快速定位到所需要的内容。


在 Cassandra 中,Primary Key 就是索引(也被称为一级索引),在查询的时候,根据 Primary Key 可以直接检索到对应的记录。而二级索引又称辅助索引,是为了帮助定位到一级索引,然后再根据一级索引找到对应记录。我们平时使用 CREATE INDEX 语句建立的就是二级索引。

当前 Cassandra 二级索引的痛点有哪些?


原生 Cassandra 中二级索引的实现其实是创建了一张隐式的表,该表的 Primary Key 是创建索引的列,值为对应的 Primary Key,实现相对简单,因此不可避免地带来了一些约束条件:


1.第一主键只能用“=”查询;

2.第二主键可以使用“=、>、<、>=、<=”;

3.索引列只支持“=”查询;

4.删除、更新太过频繁的列不适合建立索引;

5.High-cardinality 列不适合做索引;


基于以上约束,Cassandra 二级索引能提供的查询功能非常有限。

Why Lucene?


Lucene 是当下最火的开源全文检索引擎工具,具有以下特点:


1.稳定、索引性能高;

2.是高效、准确、高性能的搜索算法;

3.具备丰富的查询类型:支持短语查询、通配符查询、近似查询、范围查询等;

4.有强大的开源社区支持,可维护性好;


因此,用集成 Lucene 引擎来补充 Cassandra 查询能力的弱点是最佳选择,毕竟谁又会拒绝一款性能稳定、持续成长、又更新迭代的搜索引擎呢?


Lucene 引擎强大的倒排索引和列式存储能力,赋予了 GaussDB(for Cassandra)高效的多维查询、文本检索、统计分析等能力,在使用体验上和原生二级索引相似,但同时拥有了更为丰富的语法支持。

使用 Lucene 二级索引后,我的查询发生了哪些变化?

更加灵活的查询、过滤方式:


所有查询均可不带 PK 或者带部分 PK,并且索引列支持 “>、<、in”等操作符,用户不需要再局限于只使用“=”。

强大的文本检索能力:


文本检索能力正是 Lucene 最擅长的,使用起来十分方便,只需要通过关键词 like 即可实现。


你可以这样:


SELECT * FROM example WHERE field LIKE 'test%';   // 前缀查询
复制代码


也可以这样:


SELECT * FROM example WHERE field LIKE 'start*end';   // 正则匹配
复制代码


还可以这样:


SELECT * FROM example WHERE field LIKE '%+lucene +index%';   // 全文搜索功能,性能高效,稳定
复制代码

支持超万亿规格的大数据量统计:


select count(*) from example where pk > 1 and expr(lucene_index, 'count');  
复制代码

多种删除方式:


支持 single 单行删除、partition 分区删除、range 范围删除,全方位覆盖各种删除场景。


DELETE FROM example WHERE pk1='a' AND field=1;   // single单行删除DELETE FROM example WHERE pk1='a' AND pk2=5000;   // partition分区删除DELETE FROM example WHERE pk1='a' AND pk2=3000 AND ck1=2 AND ck2>'a' AND ck2<'c';   // range范围删除
复制代码

支持扩展 json 查询接口,轻松应对各种复杂查询场景:


扩展的 json 查询接口提供了丰富的查询语法,用法更多样化。以下是关键字列表:



举个栗子:


SELECT * FROM example WHERE EXPR(index_field, '{"filter": {"bool": {"should": [{"bool": {"should": [{"bool": {"must": [{"bool": {"should": [{"range": {"ck1": {"lt": 2}, "ck1": {"gte": 4}}}]}}, {"bool": {"should": [{"range": {"field1": {"lt": 2}, "field1": {"gt": 3}}}]}}]}}, {"bool": {"should": [{"term": {"pk1": "a", "pk1": "b", "pk1": "c"}}]}}]}}, {"bool": {"must": [{"range": {"field2": {"gte":5, "lte": 15}, "pk2": {"gt": 2000}}}]}}]}}}')
复制代码


通过条件组合加嵌套,您可以 DIY 符合自身业务的 sql 语句,并且最高支持 200 层 json 嵌套,再复杂的场景也能处理!


华为云 GaussDB(for Cassandra)搭载 Lucene 引擎,通过 Lucene 二级索引将搜索能力下沉至底层,从根本上解放了应用层查询,兼具多维查询、文本检索、统计分析等多种能力,可以完美地弥补 NoSQL 弱查询功能的短板,让企业从容应对海量数据的复杂查询场景。还等什么,速来体验吧!

附录


本文作者:华为云高斯 Cassandra 团队

更多技术文章,请关注高斯 Cassandra 官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1563519101830986


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案_数据库_华为云开发者联盟_InfoQ写作社区