elasticsearch之初识

elsaticsearch是什么

elsaticsearch是一个全文搜索引擎,支持非实时的结构化搜索,底层是基于lucene,可以理解elasticsearch是基于lucene做了一些封装,lucene提供单机服务,elasticsearch提供分布式的服务。

elsaticsearch里面组件概念

1. node节点

一个es的进程可以理解为一个node,一般一个es集群由很多node组成。节点角色分为好几种:

  • datanode数据节点,数据存放数据的处理各种增删改查操作的节点对机器配置要求较高

  • clientnode协调请求节点,就是路由请求到datanode,然后汇聚结果

  • ingestnode预处理节点,对请求进行预先的处理,比如需要对bulk做字段映射之类的

  • masternode选主节点,主要是元数据的管理,对机器配置要求低

  • machinelearningnode机器学习节点

2. indice索引

一类文档数据的集合,简单理解就是数据库里面的一张表,里面包含很多文档数据

3. type

一个索引可以有多个type,这个目前6.0以后就不建议使用了,7.0以后就废弃了

4. shard

一个索引底层数据的存储分散再几个shard分片上的(索引创建时候可以指定shard),具体数据落在哪个shard上就是通过id的hash路由的

5. segment

一个shard由n多个segment组成,每个segment都是包含一小部分数据的文件集合(里面包含倒排,docvalue,bkd tree等)

6. document

文档,可以理解为数据库表中的一条数据,一个索引里面含有很多doc

7. field

一个文档有好几个字段,可以理解数数据库表的表字段

image.png

elsaticsearch检索快的原因

elasticsearch主要是基于倒排,正排,bkd树等数据结构来加速查询,下面简单介绍下,后面文章系列会做一个详细的介绍

1. 倒排

就是一种字段值到文档id的映射,比如我要查一个name,通过name很快能定位到包含name的文档列表
image.png

2. 正排

就是一种文档id到字段值得映射,比如我通过name字段做排序,那会遍历文档id,然后通过文档id拿到对应的name值,然后进行比较排序

image.png

elsaticsearch里面容易混淆的一些术语

1. refresh和flush

refresh:每个索引都会有个refresh时间,默认是1s,意思是每隔1秒后,会生成一个segment,然后数据就可以被查询到了,注意此时refresh生成segmen相关文件未落盘只是在系统缓存中,具体是否落盘是由内核决定的

flush:每隔一定时间或者translog文档数到一定数量,会触发flush,注意:flush会强制还未落盘的segment强制落盘

2. tanslog

translog就是数据操作记录,主要是用来防止数据丢失的,比如断电等场景,这个一般是默认试试刷盘的,如果允许断电这种数据有小部分丢失,可以改成异步刷盘,提升数据的写入效率

后话

后续会有一些列的es文章,有实战的,有最佳实践的,有原理分析的,还希望大家多多关注

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享