美文网首页ElasticSearch入门elasticsearch玩转大数据
六十七、Elasticsearch内核原理-继续优化写入流程实现

六十七、Elasticsearch内核原理-继续优化写入流程实现

作者: 编程界的小学生 | 来源:发表于2017-07-12 15:24 被阅读241次

1、完整的优化写入流程步骤

(1)数据写入buffer缓冲和translog日志文件

(2)每个1s,buffer中的数据被写入新的segment file,并进入os cache,此时segment就被打开并供search使用

(3)buffer被清空

(4)重复1~3,新增segment不断添加,buffer不断清空,而translog中的数据不断累加

(5)当translog长度达到一定程度的时候,commit操作发生

  • (5-1)buffer中的所有数据写入一个新的segment,并写入os cache,打开供使用
  • (5-2)buffer被清空
  • (5-3)一个commit point被写入磁盘,标明了所有的index segment
  • (5-4)filesystem cache中的所有index segment file缓存数据,被fsync强行刷到磁盘上
  • (5-5)现有的translog被清空,创建一个新的translog

2、图解

Paste_Image.png

3、基于translog和commit point,如何进行数据恢复?

fsync+清空translog,就是flush,默认每隔30分钟flush一次,或者当translog过大的时候,也会自动flush。

Paste_Image.png

手动flush的方法:
POST /my_index/_flush
一般别手动flush,让ES自动flush就好了。

4、其他
translog每隔5s被fsync一次到磁盘上,在一次增删改操作之后,当fsync在primary shard 和 replica shard都成功之后,那次增删改操作才会成功,但是这种在一次增删改时强行fsync translog可能会导致部分操作比较耗时,当允许部分数据丢失的话,建议设置异步fsync translog

PUT /my_index/_settings
{
    "index.translog.durability": "async",
    "index.translog.sync_interval": "5s"
}

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg

相关文章

网友评论

  • Xr丶_c967:translog写入磁盘,文件系统缓存数据也写入磁盘 ,这不重复?小白 不懂

本文标题:六十七、Elasticsearch内核原理-继续优化写入流程实现

本文链接:https://www.haomeiwen.com/subject/dpybhxtx.html