BWA(Burrows-Wheeler Aligner)是如何建立索引和进行快速匹配的
BWA(Burrows-Wheeler Aligner) 是如何建立索引和进行快速匹配的
一、BWA 的流程概述
-
构建索引(Indexing)
- 首先,BWA 对参考基因组序列进行预处理,构建一个压缩的索引结构,以支持快速的序列匹配。
- 这个索引是基于 Burrows-Wheeler 变换(BWT) 和 FM-索引 构建的。
-
序列比对(Alignment)
- 使用预先构建的索引,对读取的序列(query sequences)进行比对。
- BWA 支持精确匹配和允许一定程度错配的比对,能够处理小范围的突变。
二、关键数据结构与算法
1. Burrows-Wheeler 变换(BWT)
- 概念:BWT 是一种可逆的字符串变换,将原始字符串转换为更易于压缩和搜索的形式。
- 作用:在生物信息学中,BWT 被用来构建压缩的全文本索引,以实现快速的子串搜索。
2. 后缀数组和后缀树
- 虽然后缀树可以快速搜索模式,但其内存消耗较大。
- 后缀数组是后缀树的空间优化版本,但对于大规模基因组仍然占用大量内存。
3. FM-索引
- 原理:结合了 BWT、后缀数组和额外的辅助手段,实现了对文本的压缩存储和高效查询。
- 特点:支持快速的精确和近似匹配,且内存占用较小。
三、索引构建的详细步骤
1. 构建 BWT
- 对参考基因组序列添加终止符(通常为
$
),然后生成所有循环右移的序列。 - 对这些序列进行字典序排序。
- 提取排序后序列的最后一列,即得到 BWT 序列。
2. 生成辅助手段
- C 数组:统计在字典序中比某个字符小的字符的数量。
- Occ 表:记录 BWT 序列中每个字符在指定位置前出现的次数。
3. 构建 FM-索引
- 使用 C 数组和 Occ 表,可以在 BWT 上进行高效的反向搜索(Backward Search)。
- FM-索引将这些结构进行了压缩存储。
四、快速匹配的算法
1. 反向搜索(Backward Search)
- 从查询序列的末尾开始,逐字符逆向匹配。
- 使用 C 数组和 Occ 表,更新可能匹配的位置范围。
- 在匹配过程中,范围逐渐缩小,最终确定匹配的位置。
2. 处理错配
- BWA 支持允许一定错配的比对。
- 采用了基于 动态规划 和 启发式算法 的方法,如前向搜索(Forward Search)和部分匹配。
五、利用存储器层次结构提高速度
1. 数据局部性和缓存
- 局部性原理:程序访问的数据和指令倾向于聚集在一起,分为时间局部性和空间局部性。
- 在 BWA 中:
- 索引结构被设计为紧凑的,使得相关数据在内存中相邻,增加缓存命中率。
- 反向搜索过程中,对 C 数组和 Occ 表的访问具有较好的局部性。
2. 内存压缩
- 索引的压缩存储减少了内存占用,使得更多的数据可以驻留在高速缓存(L1、L2、L3 缓存)中,加快访问速度。
3. 多线程并行
- BWA 支持多线程,能够同时处理多个序列的比对。
- 多线程在 CPU 层面利用缓存一致性协议,共享数据,提高了整体性能。
六、类似的算法和工具
1. Bowtie
- 也是基于 BWT 和 FM-索引的比对工具。
- 采用了更激进的压缩和索引策略,内存占用更小,速度更快。
2. SOAP2
- 基于 Burrows-Wheeler 变换和位图的索引结构。
- 在全基因组水平上进行高效的短序列比对。
3. HISAT2
- 结合了 Hierarchical FM-Index 和跳跃表,适用于包含剪接事件的 RNA-seq 数据。
七、小结
- BWA 利用 BWT 和 FM-索引,构建紧凑的参考基因组索引,实现了对查询序列的快速匹配。
- 核心是通过 反向搜索算法,在索引上高效地定位查询序列的位置,支持处理少量的突变。
- 通过 压缩存储 和优化的数据结构设计,充分利用了存储器层次结构,提高了缓存命中率,进而提升了比对速度。
- 类似算法 也采用了类似的思想,不断优化数据结构和算法流程,以适应不断增长的基因组数据规模和分析需求。
参考资料:
-
Li, H., & Durbin, R. (2009). Fast and accurate short read alignment with Burrows-Wheeler transform. Bioinformatics, 25(14), 1754-1760.
-
Langmead, B., Trapnell, C., Pop, M., & Salzberg, S. L. (2009). Ultrafast and memory-efficient alignment of short DNA sequences to the human genome. Genome biology, 10(3), R25.
-
Kim, D., Langmead, B., & Salzberg, S. L. (2015). HISAT: a fast spliced aligner with low memory requirements. Nature methods, 12(4), 357-360.