博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch 事务日志 sync 都干了些什么?
阅读量:6270 次
发布时间:2019-06-22

本文共 521 字,大约阅读时间需要 1 分钟。

what

本质上就是把generation和它所属的ops位置的关联信息写到写到.ckp文件中。

上图表示新建doc过程的文件变化 – 

首先把doc1写入lucene的索引文件,其实只写到了操作系统的page cache。

然后再把index(doc1)写入tlog文件(已落盘)

最后一步就是sync,蓝色部分是sync前的状态,它表示最近提交的generation=5,跟此gen关联的ops有两个,其实位置在第80个字节,如果sync后,.ckp将更新opsnum=3,offset=80+index(doc1)

why

如果不去sync会咋样?如果在上图的状态下掉电的话,看看会发生什么事情 — lucene中的doc1没了,服务重启后,找到最新的generation=5,然后通过offset=80找到了对应的ops1和ops2。

index(doc1)被忽略了,虽然它就在ops2后面。当index(doc2)插进来,会从offset=80开始写。。。

这也是Es可能会丢数据的根源!!! — tlog日志没有同步到ckp

转载于:https://www.cnblogs.com/forestwang/p/6731720.html

你可能感兴趣的文章
findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)...
查看>>
Android事件分发机制源代码分析
查看>>
《设计模式》结构型模式
查看>>
[javase学习笔记]-8.3 statickeyword使用的注意细节
查看>>
Spring集成RabbitMQ-使用RabbitMQ更方便
查看>>
Nginx 设置域名转向配置
查看>>
.net core 实现简单爬虫—抓取博客园的博文列表
查看>>
FP-Tree算法的实现
查看>>
Android 用Handler和Message实现计时效果及其中一些疑问
查看>>
Dos命令删除添加新服务
查看>>
C#.NET常见问题(FAQ)-索引器indexer有什么用
查看>>
hadoop YARN配置参数剖析—MapReduce相关参数
查看>>
Java 正则表达式详细使用
查看>>
【ADO.NET】SqlBulkCopy批量添加DataTable
查看>>
SqlServer--bat批处理执行sql语句1-osql
查看>>
Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
查看>>
laravel安装初体验
查看>>
用yum查询想安装的软件
查看>>
TIJ -- 吐司BlockingQueue
查看>>
数据库分页查询
查看>>