ElasticSearch工作原理

ElasticSearch工作原理

es写数据的过程

  1. 客户端选择一个node(节点)发送请求,这个node就是coordinating node(协调节点)
  2. coordinating对document进行路由,将请求转发给对应的node。
  3. 实际node上的primary shard处理请求。然后将数据同步到replica shard。
  4. coordinating node如果发现primary node和replica node都处理完成之后,就返回响应结果给客户端。

es读数据的过程

可以通过document id来查询,会根据document id进行hash,判断出来当时把document id分配到哪个shard上面去,从那个shard去查询。

  1. 客户端发送请求到任意node,成为coordinating node。
  2. coordinating node对document id进行hash路由,请求转发到对应的node。然后使用随机轮询算法,在primary shard及其所有replica中随机选择一个,让读请求负载均衡。
  3. 接收请求的node返回document给coordinating node
  4. coordinating node返回document给客户端。

es搜索数据过程

  1. 客户端发送一个请求到coordinating node
  2. coordinating node转发请求到所有primary shard和replica shard。
  3. 每个shard都将自己的document id返回给coordinating node,由coordinating node进行数据整合排序
  4. 接着由coordinating node 根据doc id去各个节点拉取实际的document数据,返回给客户端

数据写入内存buffer,每隔一秒,将数据refresh到os cache,到了os cache数据才能被搜索到。每隔5秒,将数据写到translog文件。(如果此时宕机,5S的数据会丢失),translog大到一定的程度,或者时间超过30min,会触发commit操作,将缓冲区的数据都flush到segment file磁盘文件中

删除/更新底层原理

删除和更新都是将document标记为delete状态,只有当合并所有segment file时才物理删除

倒排索引

就是关键词到文档ID的映射。就是将Document分词之后,记录他们在文档出现的次数和位置。

  • 倒排索引中所有的词项都对应一个或者多个文档;
  • 倒排索引的词项根据字典顺序升序排列