Elasticsearch

2019-03-17  本文已影响0人  whupenger

ES分布式架构

ES底层是基于lucene的,核心思想是在多台服务器上启动多个es进程实例,组成一个es集群
建立一个索引时,将索引拆分成多个shard,每个shard存储部分数据,然后这个shard多个备份,每个shard都有一个primary shard,负责写入数据,但是还有几个replica shard,每个primary shard写入数据之后就会同步到其他几个replica shard上去

通过这个replica的方案,每个shard有多个备份,如果某个机器宕机了,还有别的数据副本备份在其他机器,从而实现了高可用

es集群有多个节点,会自动选举出一个master的节点,这个master节点主要是管理维护索引元数据,负责切换primary shard和replica shard身份,如果master节点宕机了,就会重新选举出一个节点为master;如果其他节点宕机了,就会由master节点将那台机器的primary shard的身份转移到其他机器的replica shard,接着如果修复了那台机器,master节点会控制将缺失的replica shard分配过去,同步修改数据,让集群恢复正常

ES的结构

es中存储数据的基本单位是索引(index),索引相当于mysql的一个数据库,索引之后是类型(type)(mysql数据库里的表),一个索引可以有多个type,每个type的字段差不多,但是会略有一点区别;type之后是mapping,mapping代表这个type的结构定义,每个type会有一个mapping,定义表里面有哪些字段和类型;之后是document,类似于mysql的一条记录,往index的type里面插入一条数据,就是指插入一条document;每个document有多个field,每个field代表这个document的一个字段的值,类似mysql的一个字段
index-->type-->mapping-->document-->field

ES写数据过程

客户端选择一个node发送请求,这个node这时被称作coordinating node(协调节点),coordinating node对document进行路由,将请求转发给对应的带有primary shard的node,coordinating node 如果发现primary node和所有的replica node都写完之后,会返回响应结果给客户端

image

ES读数据过程

可以通过doc id来查询,会根据doc id进行hash,判断doc id被分配到那个shard上去,从那个shard去查询

ES搜索数据过程

ES写数据底层原理

删除/更新底层原理

如果是删除操作commit的时候会生成一个.del文件,里面将某个doc标识为deleted状态,那么搜索的时候根据.del文件就知道这个doc被删除了
如果是更新操作,就是将原来的doc标识为deleted状态,然后重新写入一条数据

buffer 每次 refresh 一次,就会产生一个 segment file,所以默认情况下是 1 秒钟一个 segment file,这样下来 segment file会越来越多,此时会定期执行merge。每次merge的时候,会将多个segment file合并成一个,同时这里会将标识为deleteddoc给物理删除掉,然后将新的segment file写入磁盘,这里会写一个commit point,标识所有新的segment file,然后打开 segment file供搜索使用,同时删除旧的segment file

倒排索引

DocID Doc
1 谷歌地图之父跳槽 Facebook
2 谷歌地图之父加盟 Facebook
3 谷歌地图创始人拉斯离开谷歌加盟 Facebook
4 谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关
5 谷歌地图之父拉斯加盟社交网站 Facebook

对文档进行分词之后,得到以下倒排索引

WordId Word DocIds
1 谷歌 1,2,3,4,5
2 地图 1,2,3,4,5
3 之父 1,2,4,5
4 跳槽 1,4
5 Facebook 1,2,3,4,5
6 加盟 2,3,5
7 创始人 3
8 拉斯 3,5
9 离开 3
10 4
.. .. ..

另外,实用的倒排索引还可以记录更多的信息,比如文档频率信息,表示在文档集合中有多少个文档包含某个单词。

那么,有了倒排索引,搜索引擎可以很方便地响应用户的查询。比如用户输入查询 Facebook,搜索系统查找倒排索引,从中读出包含这个单词的文档,这些文档就是提供给用户的搜索结果。

上一篇 下一篇

猜你喜欢

热点阅读