01
FASTQ 输入
FASTQ 或压缩 FASTQ 流从 parser 栈进入系统。
fq-compressor 围绕“有界 block 流水线”组织:串行输入、并行 block 处理、串行归档输出。 这一拆分直接体现在 include/fqc/pipeline/ 的公共接口,以及 src/commands/ 中的命令装配代码里。
压缩命令串起五类职责:
include/fqc/io/fastq_parser.h、include/fqc/io/compressed_stream.hinclude/fqc/algo/global_analyzer.h,决定 reads 如何分组以及是否需要重排元数据include/fqc/pipeline/pipeline.h,把解析结果转换成按逻辑流组织的视图include/fqc/algo/block_compressor.h、include/fqc/algo/id_compressor.h、include/fqc/algo/quality_compressor.hinclude/fqc/format/fqc_writer.h、include/fqc/pipeline/writer_node.h实际数据流可概括为:
01
FASTQ 或压缩 FASTQ 流从 parser 栈进入系统。
02
record framing 与流归一化把原始输入转成可进入归档的记录。
03
在 block 工作开始前,先确定统计、重排意图与内存纪律。
04
chunk 整理阶段把解析结果转成稳定的 archive-order 工作单元。
05
序列、ID 与质量值逻辑流在 block 边界内独立编码。
06
writer 输出 blocks、校验和、元数据以及后续检索要用的索引结构。
关键边界是 block。 分析阶段可能观察全量输入,但 payload 编码与归档存储始终保持在 block 级别,这样既能利用多核并行,也不会失去后续直接按 block 定位的能力。
解压按相同边界反向展开:
01
读取入口从归档头、索引表和 block 边界开始。
02
先装入头信息和 block 元数据,再决定完整恢复还是定向提取。
03
索引驱动的定位阶段决定本次必须解码哪些 block。
04
payload 逻辑流在同一套 block 级契约下独立解压。
05
只有在命令显式要求时,才执行原始顺序恢复。
06
解码后的记录以请求的输出模式离开归档。
Reader 侧的关键锚点是 include/fqc/format/fqc_reader.h、include/fqc/pipeline/fqc_reader_node.h 与 include/fqc/pipeline/decompressor_node.h。 src/commands/decompress_command.cpp 负责决定本次运行是完整恢复还是定向提取。 include/fqc/pipeline/pipeline_node.h 与 include/fqc/pipeline/pipeline_nodes.h 继续保留为 实现导向的兼容性 include;新的集成代码应优先使用 include/fqc/pipeline/pipeline.h。
FASTQ 解析和最终归档写出天然带顺序语义。 把这两个阶段保持为串行,可以避免为 record framing、footer 更新和最终输出顺序引入额外线程协调。
一旦某个 chunk 拥有稳定的 archive-order read 范围,每个 block 就可以独立压缩或解压。 这也是 include/fqc/pipeline/pipeline.h 用 ReadChunk 和 CompressedBlock 表示完整工作单元的原因。
流水线被设计成不会无限累积在途数据。 include/fqc/pipeline/pipeline.h 定义了 kDefaultMaxInFlightBlocks,而 include/fqc/common/memory_budget.h 则控制流水线在任一时刻允许持有的总数据量。
CLI 本身保持很薄。 src/main.cpp 负责参数解析,src/commands/compress_command.cpp 与 src/commands/decompress_command.cpp 把线程数、内存限制、顺序保持、校验和输出模式等选项转换成流水线配置。
这样大部分运行时行为都留在可复用的库代码里,而不是散落在 CLI 分支判断中。
include/fqc/pipeline/pipeline.h、src/pipeline/pipeline.cppinclude/fqc/pipeline/reader_node.h、include/fqc/pipeline/writer_node.hinclude/fqc/pipeline/fqc_reader_node.h、include/fqc/pipeline/decompressor_node.h、include/fqc/pipeline/fastq_writer_node.hinclude/fqc/pipeline/pipeline_node.h、include/fqc/pipeline/pipeline_nodes.hsrc/commands/compress_command.cpp、src/commands/decompress_command.cpp