ElasticSearch工作原理
es写数据的过程
- 客户端选择一个node(节点)发送请求,这个node就是coordinating node(协调节点)
- coordinating对document进行路由,将请求转发给对应的node。
- 实际node上的primary shard处理请求。然后将数据同步到replica shard。
- coordinating node如果发现primary node和replica node都处理完成之后,就返回响应结果给客户端。
es读数据的过程
可以通过document id来查询,会根据document id进行hash,判断出来当时把document id分配到哪个shard上面去,从那个shard去查询。
- 客户端发送请求到任意node,成为coordinating node。
- coordinating node对document id进行hash路由,请求转发到对应的node。然后使用随机轮询算法,在primary shard及其所有replica中随机选择一个,让读请求负载均衡。
- 接收请求的node返回document给coordinating node
- coordinating node返回document给客户端。
es搜索数据过程
- 客户端发送一个请求到coordinating node
- coordinating node转发请求到所有primary shard和replica shard。
- 每个shard都将自己的document id返回给coordinating node,由coordinating node进行数据整合排序
- 接着由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分词之后,记录他们在文档出现的次数和位置。
- 倒排索引中所有的词项都对应一个或者多个文档;
- 倒排索引的词项根据字典顺序升序排列