Lindorm全文索引技术介绍-阿里云开发者社区

开发者社区> 云原生多模数据库Lindorm> 正文
登录阅读全文

Lindorm全文索引技术介绍

简介: 随着云原生、5G/IOT时代的到来,数据已经成为企业的重要资产,企业客户除了要求数据库能够“存得起”数据外,更加期望数据可以“看得见”,本文将介绍云原生多模数据库Lindorm的全文索引特性,基于Lucene构建倒排索引和列式存储,提供高效的多维查询、文本检索、统计分析能力,让数据更加可见。

用户福利

阿里云最新发布业界首款云原生多模数据库Lindorm,新用户可享9.9元/3个月优惠,技术交流钉钉群:35977898,更多内容请参考链接

背景

作为面向大数据场景的半结构化、结构化存储系统,Lindorm已经在阿里发展了近十年,并始终保持着快速的能力更新和技术升级,其在功能、性能、稳定性等方面的诸多创新历经了长时间的大规模实践考验,被全面应用于阿里集团、蚂蚁集团、菜鸟、大文娱等各个业务板块,成为目前为止公司内部数据体量最大、覆盖业务最广的数据库产品。

image.png

Lindorm作为云原生多模数据库,目前支持宽表、时序、搜索、文件等多种数据模型,各模型间数据互融互通,一处写入处处可读,以适应用户在不同场景下的需求,使应用开发变得更加敏捷、高效。更全面的Lindorm介绍,可参考:存的起,看得见—云原生多模数据库Lindorm技术解析

image.png

Lindorm一直致力于"让企业数据存的起,看得见",除了提供海量数据的低成本冷热存储,Lindorm也提供了丰富的索引支持,让数据能够实时可见,接下来我们将讲述Lindorm为满足企业客户的多样化查询需求而开放的全文索引功能。

数据查询的痛点

image.png

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提供了强一致的全局二级索引,目前已经广泛应用在各个业务场景中。

image.png

除了这些通用查询外,随着业务发展,更多的查询需求随之而来:

  • 随机多维查询
  • 通配符模糊查询
  • 文本检索
  • 排序统计
  • 深度翻页
  • ......

主键查询和二级索引已经无法满足这样的需求,那如何在原有数据库基础上支撑这些需求呢?

image.png

业界数据库在面对这样的问题时,通常有两种做法:
1.DB内核内置搜索引擎(Lucene),提供全文索引能力。例如:MongoDB Atlas Search,Couchbase Search等。

2.DB+独立的搜索引擎,两个系统相互融合提供全文索引的能力。例如:AWS的DynamoDB与CloudSearch,Azure的ComosDB与Search,Greenplum GPText,以及Datastax推出的Cassandra Search。

Lindorm作为一款多模数据库,支持宽表、时序、搜索、文件四种模型,模型之间数据相互贯通,借助搜索引擎可以天然为宽表提供全文索引的能力,这也与业界的通用实现不谋而合。

全文索引示例

image.png

针对上面的表数据,我们可以对表中的多个列建立一个全文索引:姓名(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等,满足海量数据下的高效检索需求。

image.png

LindormSearch的数据持久化存储在LindormStore中,通过自动Sharding的方式分散到多台SearchServer中,每一个分片拥有多个副本,支持一写多读,提升查询聚合的效率,同时这些副本之间共享存储,有效消除副本之间的存储冗余。

宽表与搜索的融合

通过融合搜索引擎,借助Lucene的倒排索引和列式存储能力,我们为宽表提供了全文索引功能,在使用体验上类似二级索引,同时有更为丰富的语法支持,例如:分词、高亮、统计聚合等。
image.png

CQL访问

CQL全称Cassandra Query Language,是Cassandra社区提供的一套类SQL语言,熟悉SQL操作的开发人员可以很轻松的使用CQL。除了原生API访问全文索引外,Lindorm同样也提供CQL访问全文索引的能力,借助CQL可以实现对索引的管理操作,通过DML语句可以实现对宽表数据的读写,内部会自动路由到全文索引。

image.png

典型场景

全文索引提供丰富的查询能力,配合宽表引擎,可以广泛应用在移动出行、电商/网站、系统分析、时空时序场景。

案例一:订单详情

image.png

案例二:用户画像

image.png

最后

体验全文索引,请参考指导文档:Lindorm全文索引,更多的技术交流,可以通过钉钉扫描二维码入群,可参考专家服务

undefined

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生多模数据库Lindorm
使用钉钉扫一扫加入圈子
+ 订阅

Lindorm是适用于任何规模、多种类型的云原生数据库服务,支持海量数据的低成本存储处理和弹性按需付费,兼容HBase、Solr、SQL、OpenTSDB等多种开源标准接口,是互联网、IoT、车联网、广告、社交、监控、游戏、风控等场景首选数据库,也是为阿里巴巴核心业务提供支撑的数据库之一。

官方博客
链接