4.zookeeper原理解析-数据存储之FileTxnLog& FileTxnSnapLog工具
来源:互联网 发布:linux tar命令unzip 编辑:程序博客网 时间:2024/06/05 05:40
=====================================斩秋|http://blog.csdn.net/quhongwei_zhanqiu=======================================
FileTxnLog类用来操作事务记录文件下面我们来看看这个类主要实现方法
4.1)append方法: 用来向文件尾部添加一条记录
4.1.1)判断当前输入流logStream是否已清空(在同步处理器SyncRequestProcessor中据一定算法得出一个count,记录大于count就要rollLog,开启一个新的文件,算法是: 100000/2 + random.nextInt(100000/2), 这个十万是一个默认值可配置),清空开启一个新的文件写入
4.1.2)padFile()判断是否要扩充文件容量预分配buffer,当buffer容量小于等于4k的时候预分配,每次扩充预分配64k容量
4.1.3)数据序列化,写入输入流缓存
4.2)read(zxid): 读取事务日志, 这个方法在服务当机恢复的时候,用来遍历事务日志来恢复数据。Zxid是事物日志号递增生成,在FileTxnLog中会将大于zxid的所有日志文件组合成一个FileTxnIterator用来遍历从zxid开始的所有日志
4.2.1)FileTxnIterator的构造器中调用init方法,init方法中过滤出所有需要读的日志文件,并利用goToNextLog()方法打开第一个日志日志文件的输入流
4.2.2)FileTxnIterator的next方法用来从日志文件中读取一条记录,校验并反序列化出来,读取成功返回true,如果读到了文件末尾调goToNextLog()读下一个文件,以此递归直到最后
4.2.3)FileTxnIterator的getTxn()方法,返回next()方法中读取的记录
4.3)commit()方法,将流中数据刷到硬盘SyncRequestProcessor中任务会定时调用异步刷盘
4.4)truncate(zxid)方法,用来删除日志,主要是在恢复数据的时候,利用leader的最后有效zxid,来删除learner的无效多余的事务记录。类似于数据库中的truncate操作概念,它并不是一条一条删除记录,大于zxid的文件直接将文件删除掉,zxid所在文件直接修改文件的长度,将文件长度设置到zxid所在的位置
4.5)序列化事务记录
4.6)反序列化事务记录
5FileTxnSnapLog
这是一个工具类主要用来操作TxnLog和Snapshot文件,我们主要关注一下restore方法
=====================================斩秋|http://blog.csdn.net/quhongwei_zhanqiu=======================================
- 4.zookeeper原理解析-数据存储之FileTxnLog& FileTxnSnapLog工具
- Zookeeper系列(十九)Zookeeper原理解析之数据存储之FileTxnLog& FileTxnSnapLog工具类
- 1.zookeeper原理解析-数据存储之Zookeeper内存结构
- Zookeeper系列(十五)Zookeeper原理解析之数据存储之Zookeeper内存结构
- 2.zookeeper原理解析-数据存储之Snapshot
- 3.zookeeper原理解析-数据存储之TxnLog事务日志
- 5.zookeeper原理解析-数据存储之ZKDatabase
- 1.zookeeper原理解析-数据存储之Zookeeper内存结构(zookeeper系列文章)
- Zookeeper系列(十七)Zookeeper原理解析之数据存储之Snapshot
- Zookeeper系列(十八)Zookeeper原理解析之数据存储之TxnLog事务日志
- Zookeeper系列(二十)Zookeeper原理解析之数据存储之ZKDatabase
- 6.zookeeper原理解析-数据存储小结
- 【Zookeeper】源码分析之持久化--FileTxnSnapLog
- Zookeeper系列(二十一)Zookeeper原理解析之数据存储小结
- 11.zookeeper原理解析-选举之数据同步
- 读《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之数据与存储
- 7.zookeeper原理解析-序列化之底层通信数据封装与操作
- zookeeper工作原理解析
- 程序员的《学习之道》
- Distinct Subsequences -- leetcode
- javascript中字符串常用操作总结、JS字符串操作大全
- topcoder-srm610-div2-550(暴力乱搞)
- servlet开发5-servlet返回html界面
- 4.zookeeper原理解析-数据存储之FileTxnLog& FileTxnSnapLog工具
- 不包含适合于入口点的静态“Main”方法
- [转]Unicode与UTF-8互转(C语言实现)
- 第五章类和对象2015-05-11
- C/C++中extern关键字详解
- php中jsonp的跨域实例
- FPS游戏开发练习1
- Mysql 存储过程基本语法
- JavaScript闭包的作用域链模型