ElasticSearch分析——基础知识

Scroll Down

索引

ElasticSearch把数据存放在一个或者多个索引中,索引可以理解为关系型数据库中的数据库,可以向索引中读取数据 或者写入数据,ElasticSearch索引的底层实现还是依赖于Lucene把数据写入索引或者检索数据。对于ElasticSearch的一个索引是由一个或者多个Lucene索引组成;在Lucene中使用的是 按段搜索 的。 每一 segments本身都是一个倒排索引;一个Lucene索引在Elasticsearch称作一个分片。一个Elasticsearch索引 是分片的集合。 当Elasticsearch在索引中检索的时候,会发送查询到每一个属于索引的分片(Lucene 索引),然后进行评分之后获取到文档对应的score,根据是否过滤然后返回对应的文档。

文档

文档类型值全文检索类库的中的关键人物,索引的过程是为了给文档建库,映射是为了给文档建模,检索索引是读取存储的文档数据。文档定义为多个字段,每个字段的值的类型不是固定的 可以有一个或者多个值,支持嵌套文档,可以理解为一个JSON结构存储的数据。

类型

可以理解为关系数据库中的数据表,每个文档都是有一个对应的类型;

映射

在文档会被定义为多个字段。每个字段都有对应的映射关系,如字符串类型 Long,时间类型。等等 Elasticsearch会提供自动类型映射,也提供用户字节设定的_mapping查询来更改字段的映射关系

节点

每个Elasticsearch实例就是一个节点,单机满足可以常用的文档检索功能,不过在生产环境还是更加倾向于多节点构成的集群来处理需求,Elasticsearch对外提供的节点主要是3类节点。主节点 :负责协调集群内部其他节点的工作,数据节点 :用来存放数据对外提供检索功能,部落节点 : 该节点主要用于链接不同的集群实现检索多个集群的额数据。

集群

多个节点Elasticsearch实例来构成的集群,分布式的部署可以提升整个Elasticsearch的负载能力和吞吐量,成为集群可以无间断的对外提供检索能力,倘若发生了宕机,也会根据剩余的节点来进行恢复,由于分片副本的存在,所以数据的容灾可以做到保证。只要不是善于集群节点半数一下的,就可以对外提供服务;集群的节点的加入依赖于多播机制局域网对等发现;集群如果主节点发生宕机之后,剩余的节点会发送给其余的节点ping信号,当收到恢复之后,会根据返回得所属实例的pid的值从小到大排序先选第一个当做准master节点,然后再进行投票,最后确认出leader。然后播报给集群内的其余节点,对外恢复访问;

分片

其实这个分片就是一个Lucene索引,在Elasticsearch索引创建的时候回指定这个索引的主分片有几个,实际就是指定会创建多少个Lucene索引。更少的Lucene索引,检索会更高,但是更多的Lucene索引会有更快的索引速度和更慢的检索速度;而且这个主分片的数量在创建的时候被指定完毕后是无法更改的。除非创建一个新的索引然后所以重新索引全部的数据;每个分片也就是每个Lucene索引是由多个段组成的;每个段写入一次检索多次所以是创建了就是无法修改的。就算是文档被删除了,对应的段也不会立即释放;删除的信息保存在.del文件中,段本身不会进行修改,有点像mysql中我们吧数据删除了 但是真实的表空间却没有缩小,只要执行 Optmize Table tableName 才会回收空洞。然而这里的段合并的操作就是在新建新的索引的时候把根据.del文件中无用信息,不进行索引,只重新索引那些留存的数据;

副本

在分布式中间件中,一般来讲副本的存在,一方面,是提供数据的完备性。另一方面也提供了请求负载。在ES中的副本就是干这几件事情。这个副本节点可以动态更新设置,对完提供查询的能力,你可以把这些副本分片当做主分片一样。另一方面根据节点数等于分片数的设定,同时增加一杯副本。我们让主分片和其副本分片存放在不同的节点上,这样就算是主分片宕机,那么副本同样也是可以工作的;