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
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6