3. BLAST 主要变种:你的“序列搜索瑞士军刀”该怎么选?
说到BLAST,很多人以为它就是个单一工具。其实不然。我最早接触BLAST时也被这一堆名字弄晕过——blastn、blastp、blastx、tblastn、tblastx。说白了,它们就像一套瑞士军刀,各有各的用处。
先别急着记这些缩写。我们先搞清楚一个核心问题:你手里的输入是什么,你想要的输出又是什么?
3.1 核心维度:DNA vs 蛋白质
所有BLAST变种都围绕着两个维度展开:
- 查询序列:你手头有的那条序列,是DNA(核苷酸)还是蛋白质(氨基酸)?
- 目标数据库:你要在什么样的序列库里搜索,DNA库还是蛋白质库?
这两个维度的组合,就衍生出了五种标准变种。我习惯把它们画成一个矩阵,这样一看就明白了。
嗯,这张图看着清晰吧?我们挨个拆开来聊。
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,慎用。