架构设计

系统概览

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 高性能日志 ✅ 已完成
内存管理 预算追踪和自动分块 ✅ 已完成

设计原则

  1. 列式流分离 — 每种数据类型(序列、质量值、标识符)使用其最优算法独立压缩。
  2. Block 独立性 — 每个 block 可以独立压缩/解压,支持随机访问和并行处理。
  3. 自适应策略 — Read 长度分类自动选择最佳压缩策略(短读用 ABC,长读用 Zstd)。
  4. 内存预算感知 — 动态分块策略根据可用系统内存自适应调整。

源码结构

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/                # 错误处理、日志、辅助工具

详细设计

results matching ""

    No results matching ""