分布式搜索引擎的架构原理-Elasticsearch

一、倒排索引

搜索这个技术领域里最入门级别的一个概念——倒排索引。

我们先简单说一下倒排索引是个什么?

比如我们不用索引,用数据库存放和搜索一些数据,比如说放了一些论坛的帖子数据吧,那么这个数据的格式大致如下:

idtitlecontent
1Java好用吗?Java是非常非常好的一门语言。。。。
2大家一起来学Java我这儿有一些很好的Java学习资源,比如说。。。
3一次Java面试经验去年这个时候,我学了Java,今年开始了面试。。。

如果我们要是用数据库来进行搜索包含“Java”这个关键字的所有帖子,大致SQL如下:

select  *  from arties where tilte like '%java%' or content like '%java%';

但是如果通过搜索引擎类的技术来存放帖子的内容,他是可以建立倒排索引的。

这个倒排索引的数据大致看起来如下:

关键词 id
Java [1, 2, 3]
语言 [1]
面试 [3]
资源 [2]

所谓的倒排索引,就是把你的数据内容先分词,每句话分成一个一个的关键词,然后记录好每个关键词对应出现在了哪些id标识的数据里。

那么你要搜索包含“Java”关键词的帖子,直接扫描这个倒排索引,在倒排索引里找到“Java”这个关键词对应的那些数据的id就好了

然后你可以从其他地方根据这几个id找到对应的数据就可以了,这个就是倒排索引的数据格式以及搜索的方式,上面这种利用倒排索引查找数据的方式,也被称之为全文检索

二、什么叫做分布式搜索引擎

假如说你现在要存储1TB的数据,那么放在一台机器还是可以的。

但是如果你要存储超过10TB,100TB,甚至1000TB的数据呢?你用一台机器放的下吗?

当然是放不下的了,你的机器磁盘空间是不够的。

大家看一下下面的图:
在这里插入图片描述
所以这个时候,就得用分布式搜索引擎了,也就是要使用多台机器来部署搜索引擎集群。

分布式搜索引擎:把大量的索引数据拆散成多块,每台机器放一部分,然后利用多台机器对分散之后的数据进行搜索,所有操作全部是分布在多台机器上进行,形成了完整的分布式的架构。

在这里插入图片描述

三、Elasticsearch的数据结构

index:索引,类似于数据库里的一张表,大概对应表的那个概念。
field:字段
比如建立一个专门存放帖子的索引,然后他有id、title、content几个field,这个field大致就是他的一个字段。
document:代表了index中的一条数据。

下面就是一个document,这个document可以写到index里去,算是index里的一条数据。

而且写到es之后,这条数据的内容就会拆分为倒排索引的数据格式来存储。

idtitlecontent
1Java好用吗?Java是非常非常好的一门语言。。。。

四、Shard数据分片机制

比如说你有一个index,专门存放论坛里的帖子,现在论坛里的帖子有1亿,占用了1TB的磁盘空间。

但随着业务增涨,这个帖子有10亿,100亿,占用了10TB、甚至100TB的磁盘空间。

这时Index数据就无法在一台机器上存储了。

这时,必须得支持这个index的数据分布式存储在多台机器上,利用多台机器的磁盘空间来承载这么大的数据量。

而且,需要保证每台机器上对这个index存储的数据量不要太大,因为控制单台机器上这个index的数据量,可以保证他的搜索性能更高。

于是就有了:Shard数据分片结构。每个index你都可以指定创建多少个shard,每个shard就是一个数据分片,会负责存储这个index的一部分数据

比如说index里有3亿帖子,占据3TB数据。然后这个index你设置了3个shard。

现在index里的3TB数据分布式存储在了3台机器上,每台机器上有一个shard,每个shard负责管理这个index的其中1TB数据的分片。

现在如果要对这个Index的3TB数据搜索,那么可以发送请求到3台机器上去,

3台机器上的shard直接可以分布式的并行对一部分数据进行搜索,起到一个分布式搜索的效果,大幅度提升海量数据的搜索性能和吞吐量。

五、Replica多副本数据冗余机制

但是现在有一个问题,假如说3台机器中的其中一台宕机了,此时怎么办呢?

是不是这个index上的1/3数据丢失了,所以为了保证高可用,使用Replica多副本数据冗余机制。

在Elasticsearch里,就是支持对每个index设置一个replica数量的,也就是每个shard对应的replica副本的数量。

这个初始的shard就是primary shard,而且primary shard和replica shard是绝对不会放在一台机器上的,避免一台机器宕机直接一个shard的副本也同时丢失了。

在这里插入图片描述

在上述的replica机制下,每个primary shard都有一个replica shard在别的机器上,任何一台机器宕机,都可以保证数据不会丢失,分布式搜索引擎继续可用。

Elasticsearch默认是支持每个index是5个primary shard,每个primary shard有1个replica shard作为副本。

六、总结

从搜索引擎的倒排索引开始,到单机无法承载海量数据,再到分布式搜索引擎的存储和搜索。

然后我们以优秀的分布式搜索引擎ES为例,阐述了ES的数据结构,shard数据分片机制,replica多副本机制,解释了一下分布式搜索引擎的架构原理。

原文:
https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484455&idx=1&sn=f806d141d43cd870782fbae311b77958&chksm=fba6ec24ccd1653280a337c6be565d9e09c2e6d27662a06711974c67dcf9777212723db5b8fe&scene=21#wechat_redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值