PageLog是用来记事务日志的: 有9种日志类型 1. UNDO 2. COMMIT 3. PREPARE_COMMIT (用于XA,两阶段提交) 4. ROLLBACK 5. ADD 6. REMOVE 7. TRUNCATE 8. CHECKPOINT 9. FREE_LOG 还有一个NOOP(值为0)表示什么都不做 以下是每种日志类型的具体格式: 1. UNDO 字节数 代表什么 ======================= 1 type 固定是UNDO (值是1) VarInt pageId 接下来分4种情况 如果page类型是org.h2.store.Page.TYPE_EMPTY --------------------- VarInt 固定是1 如果page类型是除Page.TYPE_EMPTY以外的类型 如果使用压缩: 先对page进行压缩,如果压缩后的大小<pageSize --------------------- VarInt size 压缩后的大小 size 压缩后的字节 如果压缩后的大小>pageSize --------------------- VarInt 固定是0 pageSize page未压缩的字节 未使用压缩的情形 --------------------- VarInt 固定是0 pageSize page未压缩的字节 2. COMMIT 字节数 代表什么 ======================= 1 type 固定是COMMIT (值是2) VarInt sessionId 3. PREPARE_COMMIT 字节数 代表什么 ======================= 1 type 固定是PREPARE_COMMIT (值是3) VarInt sessionId String transaction name PREPARE_COMMIT要独占一个PageStreamData 4. ROLLBACK 字节数 代表什么 ======================= 1 type 固定是ROLLBACK (值是4) VarInt sessionId 5. ADD 字节数 代表什么 ======================= 1 type 固定是ADD (值是5) VarInt sessionId VarInt tableId VarLong row key VarInt row length length row data 6. REMOVE 字节数 代表什么 ======================= 1 type 固定是REMOVE (值是6) VarInt sessionId VarInt tableId VarLong row key 比ADD少了后面两项 7. TRUNCATE 字节数 代表什么 ======================= 1 type 固定是TRUNCATE (值是7) VarInt sessionId VarInt tableId 8. CHECKPOINT 字节数 代表什么 ======================= 1 type 固定是CHECKPOINT (值是8) 会切换新的PageStreamData 9. FREE_LOG 字节数 代表什么 ======================= 1 type 固定是FREE_LOG (值是9) VarInt page个数 page个{ VarInt pageId }