1 个不稳定版本
0.1.0 | 2023年9月5日 |
---|
#1460 在 编码
53KB
1K SLoC
轻量事务文件(LTX)
LTX文件格式提供了一种以加密和压缩的方式存储SQLite事务数据的方法,并且针对性能进行了优化。
Rust实现是从原始的Go实现派生而来,并主要遵循其设计。
在库达到1.0版本之前,API不被视为稳定,可能会发生变化。
文件格式
一个LTX文件由几个部分组成
- 头部
- 页面块
- 尾部
头部包含文件元数据,页面块包含页面帧,尾部包含文件和数据库结束状态的校验和。
头部
头部提供了页面帧数量以及数据库信息,如页面大小和数据库大小。LTX文件可以一起压缩,每个文件包含其表示的事务ID(TXID)范围。时间戳为用户提供了对事务发生时间的粗略估计,校验和提供基本完整性检查。
偏移量 | 大小 | 描述 |
---|---|---|
0 | 4 | 魔术数字。始终为"LTX1"。 |
4 | 4 | 标志。见下文。 |
8 | 4 | 页面大小,以字节为单位。 |
12 | 4 | 事务后数据库大小,以页为单位。 |
16 | 8 | 最小事务ID。 |
24 | 8 | 最大事务ID。 |
32 | 8 | 时间戳(自纪元以来的毫秒数) |
40 | 8 | 预应用数据库校验和(CRC-ISO-64) |
48 | 8 | WAL中的文件偏移量,如果是日志则为零 |
56 | 8 | WAL段的大小,如果是日志则为零 |
64 | 4 | WAL中的Salt-1,如果是日志或压缩则为零 |
68 | 4 | WAL中的Salt-2,如果是日志或压缩则为零 |
72 | 8 | 创建文件的节点ID,如果没有设置则为零 |
80 | 20 | 保留。 |
头部标志
标志 | 描述 |
---|---|
0x00000001 | 数据使用LZ4压缩 |
页面块
此块存储一系列页面头部和页面数据。
偏移量 | 大小 | 描述 |
---|---|---|
0 | 4 | 页面号。 |
4 | N | 页面数据。 |
尾部
尾部提供了LTX文件数据的校验和,应用LTX文件后的数据库状态滚动校验和,以及尾部自身的校验和。
偏移量 | 大小 | 描述 |
---|---|---|
0 | 8 | 应用后数据库校验和(CRC-ISO-64) |
8 | 8 | 文件校验和(CRC-ISO-64) |
依赖关系
~0.7–1.4MB
~30K SLoC