架构设计
系统概览
fq-compressor 由四个主要层次组成:
┌─────────────────────────────────────────────────┐
│ CLI 层 (CLI11) │
├──────────┬──────────┬──────────┬────────────────┤
│ compress │decompress│ info │ verify │
├──────────┴──────────┴──────────┴────────────────┤
│ 并行流水线 (oneTBB) │
│ 读取 → 压缩/解压 → 写入 │
├──────────┬──────────┬───────────────────────────┤
│ 序列 │ 质量值 │ 标识符 │
│ (ABC) │ (SCM) │ (Token + Delta) │
├──────────┴──────────┴───────────────────────────┤
│ FQC 格式层 (Block I/O) │
│ 文件头 │ Block │ 重排序映射 │ 文件尾 │
├─────────────────────────────────────────────────┤
│ 基础设施 │
│ 错误处理 │ 日志系统 │ 内存管理 │
└─────────────────────────────────────────────────┘
模块状态
| 模块 | 职责 | 状态 |
|---|---|---|
| FASTQ 解析器 | 解析和验证 FASTQ 格式 | ✅ 已完成 |
| FQC 格式 | 自定义压缩格式,支持随机访问 | ✅ 已完成 |
| 序列压缩 (ABC) | Spring 风格的重排序与共识编码 | ⚠️ 80% |
| 质量压缩 (SCM) | fqzcomp5 风格的上下文混合 | ⚠️ 90% |
| ID 压缩 | Delta + Tokenization | ⚠️ 90% |
| TBB 流水线 | Intel oneTBB 并行框架 | ⚠️ 40% |
| CLI 框架 | CLI11 集成 | ✅ 已完成 |
| 错误处理 | ExitCode 枚举 + Result 系统 | ✅ 已完成 |
| 日志系统 | Quill 高性能日志 | ✅ 已完成 |
| 内存管理 | 预算追踪和自动分块 | ✅ 已完成 |
设计原则
- 列式流分离 — 每种数据类型(序列、质量值、标识符)使用其最优算法独立压缩。
- Block 独立性 — 每个 block 可以独立压缩/解压,支持随机访问和并行处理。
- 自适应策略 — Read 长度分类自动选择最佳压缩策略(短读用 ABC,长读用 Zstd)。
- 内存预算感知 — 动态分块策略根据可用系统内存自适应调整。
源码结构
src/
├── main.cpp # 入口
├── cli/ # CLI 命令(compress, decompress, info, verify)
├── core/ # 核心压缩算法
│ ├── block_compressor # 序列 ABC 引擎
│ ├── quality_compressor# SCM 质量值引擎
│ ├── id_compressor # 标识符压缩
│ └── global_analyzer # Read 分析与分类
├── format/ # FQC 文件格式(读写器、索引)
├── parser/ # FASTQ 解析器(SE、PE、interleaved)
├── pipeline/ # TBB 并行流水线
├── io/ # 异步 I/O、压缩流
├── memory/ # 内存预算管理
└── utils/ # 错误处理、日志、辅助工具