2. 序列数据库基础

做功能注释,说到底离不开数据库。你算法再牛,工具再新,最后比对的对象如果质量不行,结果就是垃圾。我见过不少新手,上来就怼BLAST,完全不管数据库里装的是什么。这其实挺要命的。

今天咱们就把这三个最常用的数据库讲透。不绕弯子,直接说清楚它们各自什么时候用、为什么用。

2.1 UniProt:蛋白质信息的"维基百科"

UniProt全称是Universal Protein Resource。我个人觉得,它是目前最权威的蛋白质序列和功能数据库。为什么?因为它有手工校验的部分。

UniProt主要分成两部分:

  • Swiss-Prot:手工注释,质量极高。每条记录都有专家审核过。说白了,你拿它做参照,基本不会翻车。
  • TrEMBL:自动注释,量大管饱。由EMBL的核酸序列翻译而来,没有人工审核。我项目中遇到过一个情况——用TrEMBL比对到一个"新功能"的蛋白,后来验证发现其实是自动注释搞错了。所以用TrEMBL一定要小心。

我们来看看记录长什么样:

ID   P01308_HUMAN              Reviewed;         110 AA.
AC   P01308;
DT   21-FEB-2001, integrated into UniProtKB/Swiss-Prot.
DT   01-JAN-1988, sequence version 1.
DE   RecName: Full=Insulin;
GN   Name=INS; ORFNames=ILPR, IRDN;
OS   Homo sapiens (Human).
OC   Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
OC   Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
OC   Catarrhini; Hominidae; Homo.
OX   NCBI_TaxID=9606;
SQ   SEQUENCE   110 AA;  11980 MW;  9C1B2D3E4F5A6B7C CRC64;
     MALWMRLLPL LALLALWGPD AAAAFVNQHL CGSHLVEALY LVCGERGFFY
     TPKTRREAED LQVGQVELGG GPGAGSLQPL ALEGSLQKRG IVEQCCTSIC
     SLYQLENYCN
//

注意那个"Reviewed"标签。嗯,这里要注意,只有Swiss-Prot的条目才标注了"Reviewed"。你做Pfam注释时,如果目标物种是模式生物,我建议优先用Swiss-Prot的序列。

我的小技巧:在UniProt官网下载数据时,可以只选Swiss-Prot。命令如下:
wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz
gunzip uniprot_sprot.fasta.gz
这个文件大概200MB出头,体量适中,做本地BLAST非常合适。

2.2 RefSeq:NCBI的"官方精选"

RefSeq的全称是Reference Sequence Database。它由NCBI维护,特点是非冗余且经过人工审核。你想想看,一个物种的基因组那么大,如果不做筛选,数据库里就会塞满重复的、冗余的序列。RefSeq就是来解决这个问题的。

它的标识符格式很有规律:

  • NM_:mRNA序列
  • NP_:蛋白质序列
  • XR_/XP_:预测的转录本/蛋白质

举个例子,你搜人类p53蛋白,会看到NP_000537.3。前面的"NP"告诉你是蛋白质,中间的"000537"是唯一编号,最后的"3"是版本号。说实话,这个版本号很重要。我以前吃过亏——用旧版本号做比对,结果发现序列已经更新了,后来不得不重跑所有分析。

RefSeq和UniProt有什么区别?看表:

特性 UniProt (Swiss-Prot) RefSeq (NP_)
更新频率 每4周 持续更新
焦点 蛋白质功能细节 基因组/转录本一致性
冗余度 低(非冗余) 低(非冗余)
交叉引用 强(含大量文献、结构、GO) 强(与Gene、PubMed紧密关联)
适用场景 精细功能分析、突变注释 基因组注释、转录本分析
警告:RefSeq中的"XP_"前缀代表预测蛋白,没有实验验证。我曾经用XP_开头的序列做Pfam注释,结果发现这个"新结构域"其实是基因组组装错误导致的。千万别把预测序列当成确定序列用。

2.3 NR数据库:BLAST的"大杂烩"

NR的全称是Non-Redundant Protein Database。名字叫"非冗余",但它其实什么都装。你会问,它跟RefSeq不都是非冗余吗?

区别在这里:

  • RefSeq:每个物种只选代表性序列,手工挑选。
  • NR:把GenBank、RefSeq、UniProt、PDB等所有来源的序列合在一起,通过序列聚类去冗余。

说白了,NR是一个超级大仓库。它收录了来自所有物种的蛋白质序列,去掉了相似度极高的冗余拷贝。目前NR的规模大概在5亿条序列以上。你拿着一个未知序列去BLAST,NR是最能帮你找到远源同源物的选择。

但大也有大的问题。你看这个BLAST命令:

blastp -query my_protein.fa -db nr -out results.txt -evalue 1e-5 -num_threads 8

跑NR,即使开了8线程,一个中等长度的查询序列也需要半小时到几小时。为什么会这样?因为数据库太大,BLAST需要建立索引、逐条比对搜索,时间直接跟数据库大小成正比。

我在做宏基因组注释时,遇到一个场景:需要从海量短序列里找功能注释。如果用NR,服务器跑三天三夜都出不来。后来我换了UniRef90——也就是NR的90%相似度聚类版本——速度提升了10倍以上。有时候大而全不一定是好事。

2.4 三个数据库的协同使用策略

实际项目中,我从不会只依赖一个数据库。你想想看,每个数据库都有盲区。我的策略是这样的:

  1. 快速判断:先用Swiss-Prot或UniRef90跑BLAST,5分钟内看有没有明显同源。
  2. 深度挖掘:如果没结果,换NR,容忍更低的E-value(比如1e-3),找远源同源物。
  3. 验证交叉:用RefSeq的NP_序列做交叉检查,看候选蛋白是否被NCBI官方注释为同一家族。
  4. Pfam确认:最后用Pfam的结构域模型验证,确认序列确实包含目标结构域。
一句话总结:Swiss-Prot求准,NR求全,RefSeq求稳。三个搭配着用,能覆盖绝大多数注释场景。

下面这张图展示了三个数据库在注释流程中的关系:

序列数据库协同注释策略 未知查询序列 Swiss-Prot 手工校验,质量最高 RefSeq (NP_) 官方非冗余覆盖 NR数据库 大而全,远源同源 策略:精准比对 E-value ≤ 1e-10 优先模式生物 策略:验证交叉 版本号必须最新 避免XP_预测序列 策略:广度搜索 E-value放宽到1e-3 注意计算开销 Pfam结构域模型验证 最终确认序列的功能结构域归属

我个人最常用的组合其实是:先用NR做广谱搜索(因为NR基本能覆盖所有已知序列),然后拿Swiss-Prot交叉验证(确保不是自动注释的假阳性)。如果NR出来的结果跟Swiss-Prot对不上,我才会回头查RefSeq的基因组上下文。

下载链接备忘:
  • UniProt: ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/
  • RefSeq: https://ftp.ncbi.nlm.nih.gov/refseq/release/
  • NR: https://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/nr.gz(注意,nr.gz超过100GB)

嗯,说了这么多,其实核心就一句话:数据库选对了,注释成功了一半。我刚开始做注释时,把所有数据库混在一起用,结果BLAST跑了一周,里面有一半是内部冗余比对。后来学乖了,先理清每个数据库的定位,再根据项目需求选合适的。这才是正经专业的做法。