Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

ElasticSearch写入原理及优化 PDF 下载


分享到:
时间:2020-09-03 09:12来源:http://www.java1234.com 作者:小锋  侵权举报
ElasticSearch写入原理及优化 PDF 下载
失效链接处理
ElasticSearch写入原理及优化 PDF 下载


本站整理下载:
 
相关截图:
 
主要内容:


ES写入/查询底层原理
1. Elasticsearch写入数据流程
1.客户端随机选择一个ES集群中的节点,发送POST/PUT请求,被选择的节点为协调节点(coordinating node)
2.协调节点查询集群状态信息并计算路由,将请求发送到真正处理请求的节点(primary shard所在的节点)
3.包含primary shard的节点处理写入请求,并将数据同步到包含replica shard的节点
4.coordinating node收到包含primary shard的节点的相应信息,将最终结果返回给Client端
2. Elasticsearch读取数据流程
1.客户端随机选择一个ES集群中的节点,发送GET请求,被选择的节点为协调节点(coordinating node)
2.协调节点查询集群状态信息并使用round-robin随机轮询算法计算出去此次请求的节点,将请求发送到真正处理请求的节点(主分片节点和副本节点随机分配)
3.处理读请求的节点将数据返回给协调节点
4.协调节点会把文档信息返回给Client
3. Elasticsearch检索数据流程
1.客户端发送请求到一个协调节点
2.协调节点将搜索请求转发到所有的shard对应的primary shard或replica shard也可以
3.每个shard将自己的搜索结果(其实就是一些doc id),返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果
4.接着由协调节点,根据doc id去各个节点上拉取实际的document数据,最终返回给客户端
这里需要注意,分页查询,当from特别大时会造成大量无用数据返回到协调节点,谨慎使用。
4. 数据索引底层原理
1.先写入buffer,在buffer里的时候数据是搜索不到的;同时将数据写入translog日志文件。
2.如果buffer到达阈值,或者到一定时间,ES会将buffer中的数据refresh到一个新的segment file中,但是此时数据不是直接进入segment file的磁盘文件的,而是先进入os cache的。这个过程就是refresh。
每隔1秒钟,es就会将buffer中的数据写入到一个新的segment file,因此每秒钟产生一个新的磁盘文件(segment file),这个segment file中就存储最近1秒内buffer中写入的数据。如果buffer里面此时没有数据,就不会执行refresh操作;如果buffer里面有数据,默认1秒钟执行一次refresh操作,刷入一个新的segment file中。
操作系统里面存在操作系统缓存(os cache),数据写入磁盘文件之前会先进入os cache,先进入操作系统级别的一个内存缓存中。只要buffer中的数据被refresh到os cache中,数据就可以被检索到了。
可以通过es的restful api或者java api,手动执行一次refresh操作,就是手动将buffer中的数据刷入os cache中,让数据立马就可以被搜索到。只要数据被输入os cache中,buffer就会被清空了,因为不需要保留buffer了,数据在translog里面已经持久化到磁盘去一份了


 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐