数据库下载与管理
为什么数据库选择这么重要
Kraken2 的分类能力,说白了就靠数据库撑腰。你用的数据库质量差,结果自然不可靠。我个人的习惯是,不管用哪个数据库,先看一眼它的文档说明。PlusPFP 和 Minikraken2 我都用过,差别还真不小。
核心原则:数据库的规模直接决定分类精度和运行速度。选大了内存扛不住,选小了分类结果粗糙。你得找到自己的平衡点。
预构建数据库一览
目前主流的有三个版本。我列个表,你一看就明白。
| 数据库名称 | 内容范围 | 压缩包大小 | 推荐内存 | 适用场景 |
|---|---|---|---|---|
| PlusPFP | 细菌、古菌、病毒、质粒、原生质体、真菌、原生动物 | ~60 GB | ≥64 GB | 全面分类、科研级分析 |
| Standard | 细菌、古菌、病毒、质粒 | ~20 GB | ≥32 GB | 常规宏基因组分析 |
| Minikraken2 | 细菌、古菌、病毒 | ~4 GB | ≥8 GB | 快速测试、资源受限环境 |
你可能会问,这么多数据库,我该选哪个?说白了,选数据库就是选平衡点。我在项目里遇到过最头疼的事,就是下载到一半磁盘满了。嗯,这里要注意一个细节:压缩包大小和解压后的体积是两码事。PlusPFP 解压后直奔 100 GB 以上。
下载数据库的两种方式
方式一:用 kraken2-build 命令自动拉取。我比较推荐这个,省心。
# 先建一个目录
mkdir -p ~/kraken2_db/pluspfp
# 下载分类信息
kraken2-build --download-taxonomy --db ~/kraken2_db/pluspfp
# 下载文库(这里以细菌为例)
kraken2-build --download-library bacteria --db ~/kraken2_db/pluspfp
# 构建数据库
kraken2-build --build --db ~/kraken2_db/pluspfp
方式二:直接下载预构建好的 tarball。速度更快,适合带宽充足的情况。
# 下载 PlusPFP 预构建包
wget https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_20230314.tar.gz
# 解压到目标目录
tar -xzf k2_pluspfp_20230314.tar.gz -C ~/kraken2_db/pluspfp
小技巧:我习惯同时保留 Standard 和 Minikraken2 两个库。日常分析用 Standard,快速测试用 Minikraken2。切换起来很方便。
我曾经因为路径配置不对,浪费了一整天。当时以为下载成功了,结果 Kraken2 一直报错找不到数据库。后来才发现是目录层级搞错了。你想想看,预构建包解压后自带一层目录,要特别留意。
下面这张图把整个流程串起来了,你看一眼就能记住。
管理数据库存放路径
路径管理看着简单,坑却不少。我建议你把所有数据库统一放在一个目录下,比如 /data/kraken2_db 或者 ~/kraken2_db。
常用的管理方式有这三种:
- 环境变量法:设置
KRAKEN2_DB_PATH,一劳永逸。 - 符号链接法:用软链接指向当前要用的版本,切换方便。
- 命令行指定法:每次运行用
--db参数指定路径。
# 方法一:设置环境变量
export KRAKEN2_DB_PATH=/data/kraken2_databases
echo 'export KRAKEN2_DB_PATH=/data/kraken2_databases' >> ~/.bashrc
# 方法二:符号链接管理
ln -sf /data/kraken2_databases/pluspfp_202303 ~/current_db
kraken2 --db ~/current_db input.fasta
# 方法三:直接指定
kraken2 --db /data/kraken2_databases/minikraken2_v2 input.fasta
注意:数据库路径不要包含中文、空格或特殊字符。Kraken2 在某些版本下对这些路径处理不够友好。我曾经因为这个折腾了大半天。
验证数据库完整性
下载完别急着跑分析。先验证一下,避免白忙活。
验证分三步走:
- 检查文件完整性:对比官方提供的 MD5 或 SHA256 校验值。
- 用
kraken2-inspect查看数据库内容:确认分类层级正确。 - 跑一条测试序列:确保数据库能正常加载。
# 第一步:校验文件
md5sum k2_pluspfp_20230314.tar.gz
# 与官方提供的 MD5 值对比
# 第二步:检查数据库结构
kraken2-inspect --db ~/kraken2_db/pluspfp | head -20
# 第三步:测试查询
echo ">test
ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT" | kraken2 --db ~/kraken2_db/pluspfp --fasta-input -
个人经验:我每次下载新数据库后,都会跑一遍 kraken2-inspect。这步能提前发现数据库构建是否有问题,避免分析到一半才报错。
嗯,数据库的管理其实不难,但细节决定成败。你只要把下载、路径、验证这三个环节理顺了,后面调优才能安心进行。