Skip to content

系统设计

这一节把概念叙事对应回代码库和归档布局。当你需要理解 fq-compressor 如何在解析、分析、block 压缩、格式落盘与定向检索之间分层时,就从这里开始。

系统蓝图

整个归档是由一串显式契约拼起来的。

只要每个阶段的边界足够清晰,fq-compressor 就更容易被审计:输入、分析、block 级变换、归档落盘,以及选择性检索。

进入系统设计

01

输入

FASTQ 以及压缩 FASTQ 流,经由 parser 和流适配器进入系统。

io/fastq_parser + io/compressed_stream

02

分析

全局统计负责建立重排意图、chunk 切分与内存纪律。

algo/global_analyzer + common/memory_budget

03

压缩

block 级变换把序列、ID、质量值拆分给不同编码器处理。

algo/block_compressor + quality/id streams

04

落盘

FQC writer 负责写出 blocks、校验和、重排元数据以及后续检索要用的索引。

format/fqc_writer + format/index tables

05

检索

读取端可以在不重放整个归档的情况下完成校验、范围解码或原始顺序恢复。

format/fqc_reader + pipeline/decompressor

为什么 block 是核心边界

block 是同时承载压缩收益、校验作用域和直接定位能力的最小单元。

完整性写在哪里

校验和 verify 流程被放在归档边界,这让检索语义保持可检查。

接下来该看哪里

先读流水线理解并行与流控,再读格式与随机访问理解归档契约。

分层地图

职责关键锚点
输入打开 FASTQ 与压缩 FASTQ 输入,统一流处理include/fqc/io/fastq_parser.hinclude/fqc/io/compressed_stream.h
分析采集全局统计,决定重排意图与内存纪律include/fqc/algo/global_analyzer.hinclude/fqc/common/memory_budget.h
压缩以 block 为单位编码序列、ID 与质量值include/fqc/algo/block_compressor.hinclude/fqc/algo/id_compressor.hinclude/fqc/algo/quality_compressor.h
格式写出 blocks、校验和、重排元数据和检索结构include/fqc/format/fqc_writer.hinclude/fqc/format/fqc_header.h
检索完成校验、范围解码,必要时恢复原始顺序include/fqc/format/fqc_reader.hinclude/fqc/pipeline/decompressor_node.h

不可妥协的结构约束

  • block 是同时兼容吞吐、校验作用域与随机访问的最小单元。
  • 归档格式是产品契约的一部分,不是 CLI 背后的 opaque byte bucket。
  • 命令层必须保持瘦身,让压缩和解压行为停留在可复用的库代码里,而不是 CLI 私有分支里。

下一步