摘要:
2023-09-27 monetdb-存储架构-记录
存储架构
MonetDB SAM/BAM 模块支持两种类型的模式来存储 SAM/BAM 数据。使用顺序模式,所有对齐记录都可以轻松读取、解析并随后存储,与它们在 SAM/BAM 文件中的存储方式相当。使用成对模式,对齐记录对(由对齐记录中的信息确定)一起存储在单个数据库记录中。
元数据表
无论存储比对记录的数据库模式如何,SAM/BAM 文件的标头都存储在固定数量的元数据表中。它们的规格及关系如下图所示:
表“bam.files”存储哪些BAM文件被加载到数据库中。
file_id
:该表中的每个文件元组都包含一个唯一的文件ID,由BAM加载器在加载过程中分发;file_location
:SAM/BAM 文件在磁盘上的位置(从何处加载);dbschema
:使用的数据库存储模式,0为顺序模式,1为成对模式;format_version
:格式版本,存储在 SAM/BAM 标头中sorting_order
:该文件中的对齐记录是按哪个字段排序的;否则“未排序”。comments
:在文件头的 CO 标记内找到的注释。
数据库设计定义了额外的表来存储 SAM/BAM 文件头的其余部分,其中使用了一种非常简单的方法(例如,用于 SQ 的表“bam.sq”和用于 RG 头记录的表“bam.rg”)。有关这些字段的确切含义的更多信息,请参阅SAM规格。
对齐数据表
对于比对数据,数据库设计为已加载到数据库中的每个 SAM/BAM 文件定义一组单独的表。这种设计选择是为了加快对少量 SAM/BAM 文件的分析速度,因为这种情况在实践中经常发生。这种加速是通过不必在第一个分析步骤中过滤掉特定 BAM 文件的对齐数据来实现的。
将 SAM/BAM 对齐记录加载到数据库中时,您可以选择将这些数据存储在两组预定义的数据库表中,即顺序表集和成对表集。这些表集显示在下图中,适用于带有i 的BAM 文件。file_id
数据库设计使用每个对齐记录的虚拟偏移量作为主键。通过存储此虚拟偏移,可以使用 SAMtools 等轻松地在原始 SAM/BAM 文件中找到特定的对齐方式。
顺序模式
顺序表集旨在从 SAM/BAM 文件中出现的比对数据进行直接映射。每个对齐字段都存储在数据库列中。此外,对齐数据中包含的额外信息被解析并存储在单独的表i中。alignments_extra_
成对模式
成对表集旨在减少对成对比对数据进行许多操作时的性能开销。在加载过程中,主要和次要比对对都会被自动识别并存储在适当的数据库表中。配对表中的列具有 或l
前缀r
( 除外qname
,因为同一对中的两个对齐记录始终具有相同的QNAME
)。带有l
前缀的列存储来自其first segment
标志设置为 1 的对齐记录的数据,并且带有前缀的列r
这样做是为了与其对齐last segment
标志设置为1。所有不能配对的比对都存储在未配对比对表中,该表与直接表集中的常规比对表具有相同的结构。
除了物理表之外,成对表集还定义了一些数据视图,这些视图也是自动创建的。这些视图提供了访问数据的方法,就像数据以顺序方式存储一样,例如,任何针对直接表集中的对齐表的查询都可以在i视图中触发。unpaired_all_alignments_
在上图中,箭头用于指示在哪些物理表上定义了不同的视图。
注意:目前,如果要将 SAM/BAM 文件加载到成对模式中,文件必须按QNAME
. 如果还不是这种情况,请先使用 SAMtools 对其进行排序,然后再尝试将其加载到数据库中。另一种方法是将文件加载到顺序模式中,将有序对齐写回 SAM 文件(请参阅SAM导出有关导出功能的更多信息),然后加载该 SAM 文件。但是,除非您已经将文件加载到顺序模式中,否则不建议这样做,因为这一系列操作通常比在插入文件之前使用 SAMtools 简单地对文件进行排序花费的时间更长。
参考:
Storage Schema | MonetDB Docs