dm-database-parser-sqllog 0.5.0

一个高性能的达梦数据库 sqllog 日志解析库,提供零分配或低分配的记录切分与解析功能
Documentation

dm-database-parser-sqllog

Crates.io Documentation License: MIT Coverage

一个高性能的达梦数据库 sqllog 日志解析库,提供零分配或低分配的记录切分与解析功能。

主要特点

  • 零分配解析:基于时间戳的记录切分,使用流式 API 避免额外内存分配
  • 轻量级结构:解析结果使用引用(&str),避免不必要的字符串复制
  • 详细的错误信息:所有解析错误都包含原始数据,便于调试和问题定位

安装

在你的 Cargo.toml 中添加依赖:

[dependencies]
dm-database-parser-sqllog = "0.4"

作为库使用

use dm_database_parser_sqllog::iter_records_from_file;

for result in iter_records_from_file("large_log.sqllog") {
    match result {
        Ok(sqllog) => {
            // 处理每条日志
        }
        Err(e) => eprintln!("解析错误: {}", e),
    }
}

更多用法请参考 examples/ 目录,所有示例均为库用法,无可执行入口。

构建与测试

# 构建库
cargo build

# 运行测试
cargo test

# 生成文档
cargo doc --open

API 文档

完整的 API 文档请查看 docs.rs

文件解析 API(推荐)

  • [iter_records_from_file] - 从文件流式读取 SQL 日志,返回一个迭代器(内存高效,批量缓冲 + 并行处理)

核心类型

  • [Sqllog] - SQL 日志结构体(包含时间戳、元数据、SQL 正文等)
  • [ParseError] - 解析错误类型(包含详细错误信息)

设计与注意事项

  • 所有 API 都直接返回解析好的 Sqllog,无需手动调用解析方法
  • 自动使用批量缓冲 + 并行处理优化性能
  • 适合处理大型日志文件(1GB 文件约 2.5 秒)
  • 流式 API 内存占用低,适合超大文件或需要提前中断的场景

测试

本项目包含了全面的测试套件:

  • 107 个测试用例: 78 个集成测试 + 29 个单元测试
  • 50+ 个基准场景: 使用 Criterion.rs 进行性能基准测试
  • 100% 通过率: 所有测试当前状态均为通过
  • 94.69% 代码覆盖率: 行覆盖率,函数覆盖率达 98.80%

测试结构

集成测试 (tests/ 目录):

  • api.rs - API 函数测试 (14 tests)
  • record.rs - Record 结构测试 (9 tests)
  • record_parser.rs - RecordParser 迭代器测试 (9 tests)
  • parse_functions.rs - 核心解析函数测试 (46 tests)

单元测试 (源码中):

  • sqllog.rs - Sqllog 结构体测试 (8 tests)
  • tools.rs - 工具函数测试 (21 tests)

Benchmark 测试 (benches/ 目录):

  • parse_file_bench.rs - API 函数性能测试

测试覆盖率

当前覆盖率: 94.69%

模块 行覆盖率 函数覆盖率
parser/api.rs 89.66% 100.00%
parser/parse_functions.rs 90.71% 95.65%
parser/record.rs 100.00% 100.00%
parser/record_parser.rs 96.72% 100.00%
sqllog.rs 100.00% 100.00%
tools.rs 96.07% 100.00%

覆盖功能:

  • ✅ 所有解析函数(parse_record, parse_meta, parse_indicators)
  • ✅ 所有错误路径和边界情况
  • ✅ 流式 API
  • ✅ 多行记录处理
  • ✅ Windows/Unix 换行符兼容
  • ✅ 大数据集处理(1GB+ 文件)

许可证

MIT License - 详见 LICENSE 文件

相关链接