请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,ES写数据,segment写入磁盘与translog写入磁盘问题?

老师,ES写数据,segment写入磁盘与translog写入磁盘问,他俩都是把读取的文件写入磁盘,不会有冲突么,segment记录的数据不是跟translog中的一样的么?还有就是如果读取的数据都会存入到translog中的话,即使没有执行fsync操作入盘,重启服务器后应该还是会重新把tranlog中的数据fsync到磁盘的吧?这块会有数据丢失的情况么?除非是segment没有写入磁盘,translog中又没有记录到的数据才会出现数据丢失的情况吧?对讲的这块逻辑,一直有点不太理解具体的流程和原理?

正在回答

2回答

segment 和 translog 最终肯定都是写文件,但是两者是各自写各自的,不相干, segment 是索引类的文件,在写之前要经过大量的计算,比如分词、构建倒排索引等,它存的是索引相关的数据,而 translog 只是简单的追加数据增删改的操作记录,只是为了后面服务意外中止时通过回放这个记录来减少数据的丢失。讲到这里你第一个问题就解决了,segment 记录的数据与 translog 是不一样的。

那么涉及到写文件逻辑就一样了,都要 fsync 后才能保证真正落盘不丢数据,fsync 前数据是存在 OS 文件系统 Cache 里面的,如果服务意外中止,那么这部分数据就丢失了,即便重启也不会再 fsync。因此 translog 其实也是会丢数据的,所以才有translog 的相关参数(index.translog.sync_interval)来控制它 fsync 的频率,这个频率越高,丢的数据就越少。降到这里你第二个问题就解决了。translog 一样会丢数据,你要设置好相关参数,确保自己可用接受相应的数据丢失。


translog 就是用来解决所谓容灾问题的。 

1 回复 有任何疑惑可以回复我~
  • 提问者 慕雪839906 #1
    非常感谢!老师真给力,赶快出本书吧,期待中
    回复 有任何疑惑可以回复我~ 2018-08-09 21:16:47
  • rockybean 回复 提问者 慕雪839906 #2
    恩,会有的!
    回复 有任何疑惑可以回复我~ 2018-08-09 21:17:50
rockybean 2018-08-09 21:11:32

另外建议问问题的时候可以 1 2 3列出来,会清晰一些,方便交流

0 回复 有任何疑惑可以回复我~
  • 提问者 慕雪839906 #1
    嗯嗯 ,知道啦
    回复 有任何疑惑可以回复我~ 2018-08-09 21:19:46

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号