用户福利
阿里云最新发布业界首款云原生多模数据库Lindorm,新用户可享9.9元/3个月优惠,技术交流钉钉群:35977898,更多内容请参考链接。
背景
作为面向大数据场景的半结构化、结构化存储系统,Lindorm已经在阿里发展了近十年,并始终保持着快速的能力更新和技术升级,其在功能、性能、稳定性等方面的诸多创新历经了长时间的大规模实践考验,被全面应用于阿里集团、蚂蚁集团、菜鸟、大文娱等各个业务板块,成为目前为止公司内部数据体量最大、覆盖业务最广的数据库产品。
Lindorm作为云原生多模数据库,目前支持宽表、时序、搜索、文件等多种数据模型,各模型间数据互融互通,一处写入处处可读,以适应用户在不同场景下的需求,使应用开发变得更加敏捷、高效。更全面的Lindorm介绍,可参考:存的起,看得见—云原生多模数据库Lindorm技术解析。
Lindorm一直致力于"让企业数据存的起,看得见",除了提供海量数据的低成本冷热存储,Lindorm也提供了丰富的索引支持,让数据能够实时可见,接下来我们将讲述Lindorm为满足企业客户的多样化查询需求而开放的全文索引功能。
数据查询的痛点
Lindorm Table引擎兼容HBase、Phoenix(SQL)、Cassandra(CQL)等开源标准接口,它的数据模型是一种松散的宽表结构,通过唯一键Rowkey确定一条数据,并且支持多个列族,每个列族的多个列集中存储。这样的数据模型,适合的查询场景主要有两种:
1.主键查询
SELECT * FROM table WHERE PK = ?;
2.前缀范围查询
SELECT * FROM table WHERE PK >= ? AND PK <= ? LIMIT 10;
而面对非主键条件的查询,一种方式是通过扫描主表来过滤出需要的数据,这会耗费过多的服务资源,造成系统的不稳定,另外一种方式是通过双写来维护多张表,但这会增加应用开发的复杂性,并且无法保证数据的一致性和写入效率。为此,Lindorm提供了强一致的全局二级索引,目前已经广泛应用在各个业务场景中。
除了这些通用查询外,随着业务发展,更多的查询需求随之而来:
- 随机多维查询
- 通配符模糊查询
- 文本检索
- 排序统计
- 深度翻页
- ......
主键查询和二级索引已经无法满足这样的需求,那如何在原有数据库基础上支撑这些需求呢?
业界数据库在面对这样的问题时,通常有两种做法:
1.DB内核内置搜索引擎(Lucene),提供全文索引能力。例如:MongoDB Atlas Search,Couchbase Search等。
2.DB+独立的搜索引擎,两个系统相互融合提供全文索引的能力。例如:AWS的DynamoDB与CloudSearch,Azure的ComosDB与Search,Greenplum GPText,以及Datastax推出的Cassandra Search。
Lindorm作为一款多模数据库,支持宽表、时序、搜索、文件四种模型,模型之间数据相互贯通,借助搜索引擎可以天然为宽表提供全文索引的能力,这也与业界的通用实现不谋而合。
全文索引示例
针对上面的表数据,我们可以对表中的多个列建立一个全文索引:姓名(name)、年龄(age)、性别(sex)、城市(city)、地址(address)。
CREATE SEARCH INDEX index_name ON table_name WITH COLUMNS name, age, sex, city, address(text);
创建完索引后,可以同时支持下面的多种查询需求:
模糊查询:SELECT * FROM table_name WHERE name LIKE ‘小%’
多维查询排序:SELECT * FROM table_name WHERE city='杭州' AND age>=18 ORDER BY age ASC
多维查询翻页:SELECT * FROM table_name WHERE name='小刘' AND sex=false OFFSET 100 LIMIT 10 ORDER BY age DESC
文本检索:SELECT * FROM table_name WHERE address CONTAINS ‘西湖区’
技术实现与功能介绍
Lindorm Search 搜索引擎
Lindorm搜索引擎是面向海量数据设计的分布式系统,兼容开源Solr标准接口,同时可无缝作为宽表、时序引擎的索引存储,加速检索查询。其整体架构与宽表引擎一致,基于数据自动分区+分区多副本+Lucene的结构设计,具备全文检索、聚合计算、复杂多维查询等能力,支持水平扩展、一写多读、跨机房容灾、TTL等,满足海量数据下的高效检索需求。
LindormSearch的数据持久化存储在LindormStore中,通过自动Sharding的方式分散到多台SearchServer中,每一个分片拥有多个副本,支持一写多读,提升查询聚合的效率,同时这些副本之间共享存储,有效消除副本之间的存储冗余。
宽表与搜索的融合
通过融合搜索引擎,借助Lucene的倒排索引和列式存储能力,我们为宽表提供了全文索引功能,在使用体验上类似二级索引,同时有更为丰富的语法支持,例如:分词、高亮、统计聚合等。
CQL访问
CQL全称Cassandra Query Language,是Cassandra社区提供的一套类SQL语言,熟悉SQL操作的开发人员可以很轻松的使用CQL。除了原生API访问全文索引外,Lindorm同样也提供CQL访问全文索引的能力,借助CQL可以实现对索引的管理操作,通过DML语句可以实现对宽表数据的读写,内部会自动路由到全文索引。
典型场景
全文索引提供丰富的查询能力,配合宽表引擎,可以广泛应用在移动出行、电商/网站、系统分析、时空时序场景。
案例一:订单详情
案例二:用户画像
最后
体验全文索引,请参考指导文档:Lindorm全文索引,更多的技术交流,可以通过钉钉扫描二维码入群,可参考专家服务。