为什么 block 是核心边界
block 是同时承载压缩收益、校验作用域和直接定位能力的最小单元。
这一节把概念叙事对应回代码库和归档布局。当你需要理解 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 是同时承载压缩收益、校验作用域和直接定位能力的最小单元。
校验和 verify 流程被放在归档边界,这让检索语义保持可检查。
先读流水线理解并行与流控,再读格式与随机访问理解归档契约。
| 层 | 职责 | 关键锚点 |
|---|---|---|
| 输入 | 打开 FASTQ 与压缩 FASTQ 输入,统一流处理 | include/fqc/io/fastq_parser.h、include/fqc/io/compressed_stream.h |
| 分析 | 采集全局统计,决定重排意图与内存纪律 | include/fqc/algo/global_analyzer.h、include/fqc/common/memory_budget.h |
| 压缩 | 以 block 为单位编码序列、ID 与质量值 | include/fqc/algo/block_compressor.h、include/fqc/algo/id_compressor.h、include/fqc/algo/quality_compressor.h |
| 格式 | 写出 blocks、校验和、重排元数据和检索结构 | include/fqc/format/fqc_writer.h、include/fqc/format/fqc_header.h |
| 检索 | 完成校验、范围解码,必要时恢复原始顺序 | include/fqc/format/fqc_reader.h、include/fqc/pipeline/decompressor_node.h |