1. PDB 数据库概述

说实话,我做了十几年结构生物信息学,每天打交道最多的就是 PDB。不管是做分子对接、结构比对,还是训练深度学习模型,第一步永远绕不开它。这一章咱们就聊聊 PDB 是什么、文件长啥样、ID 怎么编、以及怎么把数据拿到手。你别看都是基础,里头坑不少,我一个个跟你说。

1.1 PDB 简介

PDB 全称 Protein Data Bank,中文叫蛋白质数据银行。说白了,它就是全球最权威的生物大分子三维结构仓库。1971 年成立,到现在已经存了超过 20 万套结构数据。这里头有蛋白质、DNA、RNA,还有各种复合物——你想想看,几乎每个结构生物学文章里的坐标数据最后都进了这里。

我个人习惯把 PDB 比作结构生物学界的"图书馆"。你查一个蛋白的结构,就像去图书馆借一本书,通过索书号(就是 PDB ID)找到它。目前管理这个仓库的是 wwPDB 联盟,包括美国的 RCSB、欧洲的 PDBe、日本的 PDBj 等成员。它们数据同步,但网站风格和查询工具各有侧重。

我在项目里最常用的是 RCSB 的站点,因为它的搜索功能和 API 比较顺手。但如果你做大规模统计,PDBe 的 REST API 可能更友好。这个后面用到的时候我再细说。

核心一句话:PDB 是结构数据的事实标准来源。所有公开发表的三维结构,最终都会落到这里。

1.2 PDB 文件格式

PDB 文件格式是个老古董,上世纪 70 年代定的标准。固定 80 列宽,每行以记录类型开头。你打开一个 .pdb 文件,满眼都是 ATOM 和 HETATM。别慌,结构其实很清楚。

我刚开始学的时候,对着 PDB 文件一头雾水,后来总结出一张表,你对照着看就明白了:

记录类型 说明 关键列(起始-结束)
HEADER 文件头,标注 PDB ID 和分类 1 – 6
TITLE 结构标题描述 1 – 6
COMPND 化合物信息,包含分子名称 1 – 6
ATOM 标准氨基酸/核酸原子坐标 1 – 4, 7 – 80
HETATM 非标准原子(配体、水分子等) 1 – 6, 7 – 80
CONECT 原子间连接关系 1 – 6
END 文件结束标记 1 – 3

一个典型的 ATOM 记录长这样:

ATOM      1  N   ALA A   1       1.472   0.000   0.000  1.00  0.00           N
ATOM      2  CA  ALA A   1       1.479   1.000   0.000  1.00  0.00           C
ATOM      3  C   ALA A   1       2.184   1.000   1.000  1.00  0.00           C

你看,每列都有固定含义:原子序号、原子名、残基名、链标识、残基编号、x/y/z 坐标、占有率、温度因子、元素符号。我建议你处理 PDB 文件时,优先用 BioPython 或 PyMOL 的解析器,别自己写列解析——我早年吃过这个亏,手动解析时遇到列对齐偏差,调了两天才发现是空格数量不对。

避坑指南:PDB 格式虽然固定,但很多非标准文件会在末尾追加多余列,或者把 ATOM 和 HETATM 混排。我曾经从某个老旧数据库拿到的 .pdb 文件,CONECT 记录居然缺失了 30%,导致对接时配体连接全乱套。所以拿到数据后,第一件事用 validate_pdb.py 或 MolProbity 做格式校验。

1.3 PDB ID 分类

PDB ID 是 4 个字符的编码,第一位必须是数字(1–9),后三位可以是字母或数字。比如 4HHB 是血红蛋白,2HHP 是某水解酶。这个规则从 1970 年代沿用至今,你想想看,全球所有结构都挤在这个 4 位编码空间里,所以用完之后会循环吗?其实不会,因为第一位数字能到 9,后面三位组合很多,目前还没用完。

从分类角度看,PDB ID 本身不直接携带分类信息,但你可以通过它关联的元数据来做归类。我平时会按以下几个维度来切分:

  • 按实验技术:X 射线晶体学(占 85% 以上)、核磁共振(NMR)、冷冻电镜(Cryo-EM)、混合方法。
  • 按分子类型:蛋白质、DNA/RNA、蛋白质-核酸复合物、多聚体。
  • 按分辨率:高分辨率(≤1.5 Å)、中分辨率(1.5–3.0 Å)、低分辨率(>3.0 Å)。
  • 按物种来源:人源、鼠源、大肠杆菌表达、病毒等。

举个例子,PDB ID 1BNA 是一个经典的 DNA 双螺旋结构,1979 年发表,实验方法是 X 射线,分辨率 1.9 Å。你用这个 ID 去 RCSB 查,就能看到完整的实验条件和文献信息。

小技巧:在 RCSB 搜索时,可以直接用 method: "X-ray" 或 resolution: "1.0 TO 2.0" 做过滤。我习惯把这些查询条件写成 Python 字典,方便批量检索。

1.4 如何从 PDB 数据库下载文件

下载 PDB 文件的方式有好几种,我按使用频率给你列一下:

  1. 直接网页下载:去 rcsb.org 搜 PDB ID,点击 "Download Files" 选 PDB Format。
  2. 命令行下载:用 wget 或 curl,适合脚本批量拉取。
  3. Python API:用 BioPython 或 RCSB 官方 Python 库,适合集成到流程里。
  4. 批量镜像:wwPDB 提供 rsync 服务,适合建本地镜像库。

先说命令行。你拿到一个 PDB ID,比如 1BNA,可以直接这样拉:

wget https://files.rcsb.org/download/1BNA.pdb
curl -o 1BNA.pdb https://files.rcsb.org/download/1BNA.pdb

如果你想批量下载多个,写个循环就行:

for id in 4HHB 2HHP 1BNA; do
    wget "https://files.rcsb.org/download/${id}.pdb"
done

用 Python 的话,我推荐 BioPython 的 PDBList:

from Bio.PDB import PDBList

pdbl = PDBList()
# 单个下载
pdbl.retrieve_pdb_file("1BNA", pdir="./pdbs", file_format="pdb")
# 批量下载
ids = ["4HHB", "2HHP", "1BNA"]
for pid in ids:
    pdbl.retrieve_pdb_file(pid, pdir="./pdbs", file_format="pdb")

注意一个坑:BioPython 默认的 retrieve_pdb_file 会把文件压缩成 .gz 格式。如果你不想解压,可以在参数里加 overwrite=True 配合 file_format="pdb" 强制存为纯文本。我早期写流程时没注意这个,结果下游程序读不了 .gz 文件,排查了半天才反应过来。

另外,RCSB 官方提供了 GraphQL API,可以让你按条件查询并下载元数据。这个在后面的章节我们会专门讲,这里先提一嘴,你只要知道有这个东西就行。

速率限制:RCSB 对批量下载有限流策略。我试过一次性拉取 10,000 个结构,结果被暂时封了 IP。建议你加 sleep(0.5) 或使用 wwPDB 的 rsync 镜像做大规模下载。

知识体系总览

下面这张图把这章的核心知识点串在了一起。你可以对照着梳理自己的理解:

PDB 数据库知识体系结构 PDB 数据库 PDB 简介 PDB 文件格式 PDB ID 分类 如何下载文件 定义与历史(1971年至今) wwPDB 联盟管理 ATOM / HETATM 记录 CONECT / END 结构 4 位编码规则(数字+字母) 按实验技术 / 分子类型分类 网页下载 / wget / curl BioPython / RCSB API 💡 四大模块构成 PDB 数据处理的基础知识体系

好了,这章的内容就是这些。从 PDB 的由来、文件结构、ID 规则到下载方式,每一步都是后续数据处理流程的基石。你先把这些基础打牢,后面我们开始动手写代码做实际处理时,就不会被这些细节绊住脚了。