Elasticsearch 原理理解

写入数据过程

  • 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。

  • coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。

  • 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。

  • coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。

读取数据过程

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

  • 客户端发送请求到任意一个 node,成为 coordinate node 。

  • coordinate node 对 doc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin 随机轮询算法,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡。

  • 接收请求的 node 返回 document 给 coordinate node 。

  • coordinate node 返回 document 给客户端。

搜索数据过程

  • 客户端发送请求到一个 coordinate node 。

  • 协调节点将搜索请求转发到所有的 shard 对应的 primary shard 或 replica shard ,都可以。

  • query phase:每个 shard 将自己的搜索结果(其实就是一些 doc id )返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。

  • fetch phase:接着由协调节点根据 doc id 去各个节点上拉取实际的 document 数据,最终返回给客户端

写入数据原理

  • 数据先写入内存 buffer,然后每隔 1s,将数据 refresh 到 os cache,到了 os cache 数据就能被搜索到(所以我们才说 es 从写入到能被搜索到,中间有 1s 的延迟)。每隔 5s,将数据写入 translog 文件(这样如果机器宕机,内存数据全没,最多会有 5s 的数据丢失),translog 大到一定程度,或者默认每隔 30mins,会触发 commit 操作,将缓冲区的数据都 flush 到 segment file 磁盘文件中。

数据写入 segment file 之后,同时就建立好了倒排索引。

删除/更新数据原理

  • 如果是删除操作,commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。
  • 如果是更新操作,就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。
  • buffer 每 refresh 一次,就会产生一个 segment file ,所以默认情况下是 1 秒钟一个 segment file,这样下来 segment file 会越来越多,此时会定期执行 merge。每次 merge 的时候,会将多个 segment file 合并成一个,同时这里会将标识为 deleted 的 doc 给物理删除掉,然后将新的 segment file 写入磁盘,这里会写一个 commit point ,标识所有新的 segment file ,然后打开 segment file 供搜索使用,同时删除旧的 segment file 。

倒排索引特点

  • 倒排索引中的所有词项对应一个或多个文档;

  • 倒排索引中的词项根据字典顺序升序排列

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Elasticsearch一个开源的分布式搜索和分析引擎,它使用倒排索引来实现高效的数据搜索和分析功能。通过使用Elasticsearch,用户可以快速而简便地在大规模数据集中进行全文搜索、聚合分析和实数据抓取。 Elasticsearch实战是一本介绍如何使用Elasticsearch进行实际开发和应用的实用指南。它通过实际案例和示例代码,详细介绍了Elasticsearch的各种功能和实际应用场景。这本书以实战为导向,从数据建模、索引管理、搜索和分析技术到性能优化和故障排除等方面进行了全面而深入的解析。通过学习这本书,读者将掌握Elasticsearch的使用技巧并能够独立进行项目开发和维护。 另一方面,Elasticsearch原理解析是对Elasticsearch的底层原理进行深入剖析的一本书。它从分布式系统的角度出发,阐述了Elasticsearch的分片和复制机制、搜索和分析的实现原理以及缓存和路由等关键技术。此外,该书还介绍了Elasticsearch的容错机制、数据恢复策略和并发控制等重要概念。通过学习这本书,读者将更加深入地了解Elasticsearch的内部机制,从而能够更好地定制和优化应用程序。 总的来说,Elasticsearch实战和原理解析是帮助读者理解和应用Elasticsearch的重要参考书籍。前者提供了丰富的实例和实践经验,使读者能够快速上手并应用于实际项目中;而后者则深入探讨了Elasticsearch的内部原理和技术细节,使读者能够更深入地理解和运用Elasticsearch的各种功能和特性。无论是初学者还是有经验的开发人员,都可以从中获得实用的知识和技巧,并在工作中更好地应用Elasticsearch

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值