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的序列。
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紧密关联) |
| 适用场景 | 精细功能分析、突变注释 | 基因组注释、转录本分析 |
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 三个数据库的协同使用策略
实际项目中,我从不会只依赖一个数据库。你想想看,每个数据库都有盲区。我的策略是这样的:
- 快速判断:先用Swiss-Prot或UniRef90跑BLAST,5分钟内看有没有明显同源。
- 深度挖掘:如果没结果,换NR,容忍更低的E-value(比如1e-3),找远源同源物。
- 验证交叉:用RefSeq的NP_序列做交叉检查,看候选蛋白是否被NCBI官方注释为同一家族。
- Pfam确认:最后用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跑了一周,里面有一半是内部冗余比对。后来学乖了,先理清每个数据库的定位,再根据项目需求选合适的。这才是正经专业的做法。