zookeeper源码分享六 ---- 事物日志
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
二进制格式设计思想
在二进制格式设计中其实和json的格式设计类似也是有套路的。
设计要存储的内容(内容尽可能少能用数字表示不用字符串表示)。这些内容的前后顺序读写都是按照这个顺序来的。
比如FileHeader 由magic(4bytes (ZKLG)) version(4bytes) dbid (8bytes)组成写入的顺序4bytes 的ZKLG、4bytes的version、8bytes的dbid读的时候也一样
设计每个内容所占的字节数读写的时候按照顺序读写就行。zk是借助BinaryOutputArchive BinaryInputArchive 工具类实现
每块内容的字节如何设计呢
1 原始数据类型如int long 就用原本的字节大小
2 字符串类型在前面先写入字符串长度长度是原始类型。之后在写入具体的字符串内容
FileTxnLog 事物日志的二进制格式设计
不同类型的type具体的record,要看Record接口的实现类。
快照日志数据格式
DataTree 借助BinaryOutputArchive 字节工具将对象模型转换成字节保存。
将record数据的每个字段都按照基础数据类型char int long dubbo float bool 基础数据类型的字节占用大小进行写入String 类型的先写入int类型的大小在写入内存
BinaryOutputArchive 二进制输出数据流类
BinaryInputArchive 二进制输入数据流类
将record数据的每个字段都按照基础数据类型char int long dubbo float bool 基础数据类型的字节占用大小进行读取string类型的先读取大小在读取内容。
BinaryInputArchive 底层是一个DataInput