ElasticSearch架构

1.基础概念

集群-cluster,节点-node,索引-index,备份-replicas,分片-shards,文档-document,索引段-segment,事务日志-translog

2.解释
  • 集群:多个es节点组成,每个集群有一个cluster name作为标识;
  • 节点:一个es实例,一台机器可以有多个实例,所以不能说一台机器就是一个节点;
  • 索引:一些列documents的集合,相当于一个库或表;
  • 分片:每个索引有一个或多个分片,索引的数据被分配到各个分片上。每次查询一个索引,会查询该索引下的所有分片。每个分片是一个lucene index,一个分片可以存放Integer.MAX_VALUE - 128 = 2,147,483,519 个documents。
  • 备份:可以理解为备份分片,相应的有主分片-primary shard。主分片和备份不会出现在同一个节点上,防止单点故障。默认情况下一个索引创建5个分片一个备份,即总共10个分片;
  • 端:分片的元数据管理,一批数据会生成一个段;es有独立的线程不断将小的段合并成大的段,以减少文件句柄占用;
  • 文档:一个文档是一个可被索引的基础信息单元,可以是一篇文章或者一条订单消息,以json形式保存
  • 路由:根据routing规则,找到主分片;
  • 无法分配:unassigned,当只有一个节点时,主分片已分配,则备份分片无法分配。
  • yellow状态:至少一个备份分片没有就绪;
  • red状态:至少一个主分片没有就绪;
3. 倒排索引-Lucene

inverted index,只是因为一般情况下我们是根据文章号搜索文章,然后从文章中搜索相应关键词;而倒排索引则是提供关键词到文章的索引。一般是一个关键词对应一组元素,每个元素包含文章号,以及出现词的次数和位置;而es中存的是词和对应的id,以及相关度;

4.写入

数据写入的时候,根据routing将文档发送到特定的主分片中建立索引,一般通过hash并对主分片数取余来选择要写入的分片。主分片写入成功后发送给备份,可以设置0,半数或全部写入成功后返回结果给客户端。
在每一个shard中,写入流程分为两步,先写入Lucene,再写入Translog,写入translog成功后返回结果给客户端。segment虽然在内存中,translog会随时同步到磁盘。
内存中的segment要经过refresh后才能被搜索到,默认是1s的时间,所以es在搜索方面是NRT-near real time,近实时系统。

5.查询

es的查询每个分片可以从主分片或备份分片中查询。根据request的preference参数选择,preference可以设置_local,_primary,_replica以及其他选项。
es查询,会从目标索引下的所有分片查询数据,然后进行汇总返回。比如查top10时,会从所有shard中查询top10,然后通过二次排序,选择出top10结果返回。
查询分为search和get两种,search会从内存中的segment查询,这是近实时的。而get会从内存中的translog查询,然后是磁盘的translog,还没有的话查内存的segment,这是实时的查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值