#sqlite #文件格式 #加密 #ltx #litefs

litetx

轻量事务文件(LTX)编码/解码

1 个不稳定版本

0.1.0 2023年9月5日

#1460编码

Apache-2.0

53KB
1K SLoC

轻量事务文件(LTX)

LTX文件格式提供了一种以加密和压缩的方式存储SQLite事务数据的方法,并且针对性能进行了优化。

Rust实现是从原始的Go实现派生而来,并主要遵循其设计。

在库达到1.0版本之前,API不被视为稳定,可能会发生变化。

文件格式

一个LTX文件由几个部分组成

  1. 头部
  2. 页面块
  3. 尾部

头部包含文件元数据,页面块包含页面帧,尾部包含文件和数据库结束状态的校验和。

头部

头部提供了页面帧数量以及数据库信息,如页面大小和数据库大小。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