3. BLAST 主要变种:你的“序列搜索瑞士军刀”该怎么选?

说到BLAST,很多人以为它就是个单一工具。其实不然。我最早接触BLAST时也被这一堆名字弄晕过——blastn、blastp、blastx、tblastn、tblastx。说白了,它们就像一套瑞士军刀,各有各的用处。

先别急着记这些缩写。我们先搞清楚一个核心问题:你手里的输入是什么,你想要的输出又是什么?

3.1 核心维度:DNA vs 蛋白质

所有BLAST变种都围绕着两个维度展开:

  • 查询序列:你手头有的那条序列,是DNA(核苷酸)还是蛋白质(氨基酸)?
  • 目标数据库:你要在什么样的序列库里搜索,DNA库还是蛋白质库?

这两个维度的组合,就衍生出了五种标准变种。我习惯把它们画成一个矩阵,这样一看就明白了。

BLAST 变种选择矩阵 查询序列 (Query) 目标数据库 (Target Database) 核苷酸 (nt) 蛋白质 (nr) 核苷酸 (DNA) 蛋白质 (AA) blastn DNA → DNA tblastn 蛋白质 → DNA (6-frame) blastx DNA (6-frame) → 蛋白质 blastp 蛋白质 → 蛋白质 tblastx DNA → DNA (双向6-frame翻译) 快速选择口诀 "同型对同型,异型用翻译;远程找蛋白,近缘用核酸" 蓝色系:核酸搜索 | 绿色系:蛋白质搜索 | 橙色系:交叉翻译搜索

嗯,这张图看着清晰吧?我们挨个拆开来聊。

3.2 blastn:最常见的“核酸 vs 核酸”搜索

适用场景:你想找一条未知DNA序列,就去核酸数据库里比对。比如我手头有一段16S rRNA测序结果,想知道它属于哪个物种。

我经常说,blastn是BLAST家族的“入门标配”。它直接比较核苷酸序列,对插入缺失(indel)比较敏感。适合高相似度、近缘物种的比对。

特点:

  • 查询序列:DNA/RNA
  • 数据库:DNA(如NCBI nt库)
  • 比对粒度:碱基对级别
  • 典型任务:物种鉴定、引物验证、克隆验证

3.3 blastp:蛋白质比对,看“功能”而非“序列”

适用场景:功能未知的蛋白质序列,在蛋白质库里找同源物。蛋白质序列的进化保守性比核苷酸强得多。

我记得有一次做功能注释,用blastn怎么都找不到高匹配的序列。换成blastp之后,一下子找到了远缘物种的同源蛋白。为什么会这样?因为蛋白质序列的“语义”更丰富,编码区能容忍大量同义突变。

实战建议:如果查询序列是蛋白质,优先选blastp。它能利用氨基酸的理化性质进行打分,比blastn敏感许多。

特点:

  • 查询序列:蛋白质
  • 数据库:蛋白质(如nr、Swiss-Prot)
  • 比对粒度:氨基酸级别
  • 典型任务:功能注释、结构域识别、进化分析

3.4 blastx:拿DNA去比对蛋白质数据库

这个变种很有意思。它将你的DNA序列在6个阅读框架下实时翻译,然后用翻译后的蛋白质序列去搜蛋白质库。

适用场景:

  • 你得了一条新测序的EST(表达序列标签)
  • RNA-seq得到的转录本序列,不知道怎么翻译
  • 想直接看dN/dS选择压力

之前有个用户拿宏基因组测序的contig来问我,用blastn怎么找不到任何比对结果?我说你试试blastx。换成blastx之后,翻译出来的蛋白质序列一下子就匹配到了某个细菌的功能酶。这个案例让我意识到:跨物种功能注释,blastx比blastn好使太多。

注意!blastx的翻译过程比较耗时。因为每条查询序列都要实时翻译成6条可能的蛋白质序列,计算量翻了6倍。在GPU版本中,这个场景的加速收益特别明显——我会在后面章节专门讲。

变种名称 查询类型 数据库类型 翻译方式 通俗理解
blastn DNA DNA 无 直接对字
blastp 蛋白质 蛋白质 无 直接比“意思”
blastx DNA 蛋白质 查询端6-frame DNA“翻成”蛋白质再比
tblastn 蛋白质 DNA 数据库端6-frame 拿蛋白质去“反查”DNA译文
tblastx DNA DNA 两端6-frame 两端都翻译,双重开销

3.5 tblastn:反其道而行——用蛋白质去“反查”DNA库

和blastx反过来。你把蛋白质序列拿去搜DNA数据库,但执行的时候,BLAST会先把数据库里的每条DNA序列实时翻译成6个阅读框架,然后用你的蛋白质去比对这些翻译产物。

什么时候用?

  • 你有某个物种的已知蛋白,想去未注释的基因组里找它的同源基因
  • 基因组草图中可能含有内含子,直接tblastn能跨过剪切位点找到匹配

我这几年做non-model物种的基因注释时,最常用的就是tblastn。因为大多数物种的基因组只有DNA序列,没有完整的蛋白质注释。用tblastn可以“捡漏”——把已知蛋白映射到未注释的基因组区域上。

3.6 tblastx:最消耗资源的“双向翻译”

这家伙把查询端和数据库端都做6-frame翻译,所以计算量是blastn的约36倍。我不建议日常使用它。

唯一的场景:你想比较两条亲缘关系非常远的DNA序列,且它们可能编码同源蛋白。比如比较人类和小鼠某个基因的外显子区域。

我个人的经验是:在GPU加速环境下,tblastx的开销依然很大。除非有明确的跨物种同源检测需求,否则尽量用blastx或tblastn替代。

3.7 选型流程图(精简版)

为了让新手快速上手,我整理了一个决策逻辑:

输入序列是什么?
│
├── DNA/RNA
│   ├── 想比对什么库?
│   │   ├── DNA库 → blastn
│   │   └── 蛋白质库 → blastx(实时翻译)
│   │
│   └── 特殊:想跨远缘比DNA,用tblastx
│
└── 蛋白质
    ├── 想比对什么库?
    │   ├── 蛋白质库 → blastp
    │   └── DNA库 → tblastn(实时翻译数据库)
    │
    └── 特殊:在未注释基因组搜索同源,推荐tblastn

这张流程图我贴在工位旁已经三年了。每次初学者问我“该用哪个BLAST”,我就指指这张图。

3.8 本章小结

我们讲了五个核心变种的本质区别和适用场景。其实核心就一句话:同类型序列之间用blastn/blastp,跨类型时通过翻译桥梁解决(blastx/tblastn)。至于tblastx,慎用。