失效链接处理 |
ElasticSearch写入原理?qing)优?PDF 下蝲
本站整理下蝲Q?/strong>
链接Q?a target="_blank">https://pan.baidu.com/s/1gCU3UtiR9u7A4-RDuhUIrw
提取码:(x)d3f3
相关截图Q?/strong>
![]()
主要内容Q?/strong>
ES写入/查询底层原理
1. Elasticsearch写入数据程
1.客户端随机选择一个ES集群中的节点Q发送POST/PUThQ被选择的节点ؓ(f)协调节点Qcoordinating nodeQ?/div>
2.协调节点查询集群状态信息ƈ计算路由Q将h发送到真正处理h的节点(primary shard所在的节点Q?/div>
3.包含primary shard的节点处理写入请求,q将数据同步到包含replica shard的节?/div>
4.coordinating node收到包含primary shard的节点的相应信息Q将最l结果返回给C(j)lient?/div>
2. Elasticsearchd数据程
1.客户端随机选择一个ES集群中的节点Q发送GEThQ被选择的节点ؓ(f)协调节点Qcoordinating nodeQ?/div>
2.协调节点查询集群状态信息ƈ使用round-robin随机轮询法计算出去此次h的节点,请求发送到真正处理h的节点(d片节点和副本节点随机分配Q?/div>
3.处理读请求的节点数据返回给协调节点
4.协调节点?x)把文信息q回lC(j)lient
3. Elasticsearch索数据流E?/div>
1.客户端发送请求到一个协调节?/div>
2.协调节点搜索请求{发到所有的shard对应的primary shard或replica shard也可?/div>
3.每个shard自q搜烦l果Q其实就是一些doc idQ,q回l协调节点,由协调节点进行数据的合ƈ、排序、分늭操作Q出最l结?/div>
4.接着由协调节点,Ҏ(gu)doc idd个节点上拉取实际的document数据Q最l返回给客户?/div>
q里需要注意,分页查询Q当from特别大时?x)造成大量无用数据q回到协调节点,谨慎使用?/div>
4. 数据索引底层原理
1.先写入bufferQ在buffer里的时候数据是搜烦不到的;同时数据写入translog日志文g?/div>
2.如果buffer到达阈|或者到一定时_(d)ES?x)将buffer中的数据refreshC个新的segment file中,但是此时数据不是直接q入segment file的磁盘文件的Q而是先进入os cache的。这个过E就是refresh?/div>
每隔1U钟Qes׃(x)buffer中的数据写入C个新的segment fileQ因此每U钟产生一个新的磁盘文Ӟsegment fileQ,q个segment file中就存储最q?U内buffer中写入的数据。如果buffer里面此时没有数据Q就不会(x)执行refresh操作Q如果buffer里面有数据,默认1U钟执行一ơrefresh操作Q刷入一个新的segment file中?/div>
操作pȝ里面存在操作pȝ~存Qos cacheQ,数据写入盘文g之前?x)先q入os cacheQ先q入操作pȝU别的一个内存缓存中。只要buffer中的数据被refresh到os cache中,数据可以被索到了?/div>
可以通过es的restful api或者java apiQ手动执行一ơrefresh操作Q就是手动将buffer中的数据刷入os cache中,让数据立马就可以被搜索到。只要数据被输入os cache中,buffer׃(x)被清IZQ因Z需要保留buffer了,数据在translog里面已经持久化到盘M份了
|