随着转录组研究的深入,研究人员需要从转录组数据库中获取大量的 RNA 测序数据以支持基因表达、选择性剪接等分析。除了我们常用的 GEO(基因表达总库)和 ArrayExpress 数据库,还有一些数据库可以获得 RNA 测序数据比如 Node 转录组数据库 (National Omics Data Encyclopedia, 国家组学数据百科全书:多组学大数据共享平台,Node 数据库)。在本文中,我们将详细介绍 Node 转录组数据库的特点及其批量下载方法,帮助您高效获取所需数据。
本文用到的软件均可以使用 conda 直接下载安装。
Node 数据库是一个多组学数据平台,它为研究人员提供了一个集中的数据存储和访问接口,主要包括这些数据类型:
下面是官网介绍:
NODE 是一个生物大数据收集平台,包括实验样本信息的收集、序列文件的上传以及结果的分析、共享和下载。NODE 平台由六个主要模块组成:项目、样本、实验、运行、数据和分析。项目和样本是独立的,但可以通过运行进行链接,这样可以实现元数据和序列信息的整合。
help - Node - National Omics Data Encyclopedia
生物医学大数据中心隶属于中国科学院上海营养与健康研究所,致力于 1) 为中国科学院、上海及全国的生物医学研究提供全周期大数据服务,包括数据收集和共享、数据管理和分析;2) 构建数据安全、整合、共享和挖掘的技术框架,加速生物医学数据资源的协作网络;3) 增强国家生物医学大数据系统,促进生命科学数据丰富发现的范式转变,加速生物学、医学、数学和信息技术之间的跨学科融合,提高国家的“融合研究”能力。
Node 数据库支持多种下载途径,包括 HTTP 和 SFTP。对于小文件,HTTP 可能是默认选择,但对于超过 200MB 的大文件,HTTP 下载可能受限,此时需要使用 SFTP。
当文件大小超过 200MB 时,Node 数据库可能出于服务器限制或安全考虑,禁止通过 HTTP 下载。此时,SFTP(Secure File Transfer Protocol)成为理想选择。SFTP 通过 SSH 协议加密传输数据,确保安全性和稳定性,非常适合大文件的批量下载。
以下是常用的 SFTP 下载工具:
对于批量下载,命令行工具(如 sftp 和 lftp)因其灵活性和可脚本化特性更为推荐。
使用 sftp 基本下载
sftp 用户名@主机地址
连接成功后,可使用以下命令:
get 远程文件 本地文件
mget *.txt
(支持通配符)示例:
sftp> get data.fastq /local/path/data.fastq
sftp> mget *.fastq
sftp 适合简单下载,但对于批量任务,操作繁琐,建议使用 lftp。
lftp 是一个功能强大的文件传输工具,支持 SFTP,并提供多种高级功能。然而,需注意:SFTP 基于 SSH,通常使用单一连接,因此其 pget 命令的多线程下载功能在 SFTP 协议下可能受限。多线程下载(如文件分段并行)更适用于 HTTP 或 FTP(若服务器支持范围请求)。尽管如此,lftp 仍可通过并行连接下载多个文件,从而提升效率。
lftp sftp://用户名@主机地址
下载单个文件:
lftp> get remote_file.txt
pget 是 lftp 的一个子命令,通常用于加速下载。对于支持多线程的协议(如 HTTP/FTP),可通过-n
参数指定线程数:
lftp -e "pget -n 4 remote_file.txt" sftp://用户名@主机地址
但对于 SFTP,由于协议限制,pget 无法将单个文件分割成多线程下载。因此,若目标是单个大文件,下载仍为单线程。对于支持 ftp 或 http 的服务器,pget 可以显著提高下载速度。
虽然 SFTP 不支持单文件多线程,但 lftp 可以通过设置多个并发连接来同时下载多个文件。配置方法如下:
lftp -u 用户名,密码 sftp://主机地址 << EOF
set sftp:max-connections 5
mirror 远程目录 本地目录
bye
EOF
sftp:max-connections 5
:设置最多 5 个并发连接。mirror
:递归下载整个目录。主机地址
: Node 数据库的 SFTP 地址。fms.biosino.org:44398
用户名,密码
: Node 数据库的用户名和密码。远程目录
: 远程服务器上的目录路径。本地目录
: 本地存储目录。EOF
:结束 lftp 命令。bye
:退出 lftp。这将并行下载多个文件,显著缩短总耗时。
但是在 node 数据库中,fastq 文件往往不是在同一个文件夹内,所以我们往往无法使用 mirror 命令来下载所有的 fastq 文件,这时我们需要在脚本中使用循环来实现。
Shell 脚本结合 lftp 可以实现自动化批量下载,适合处理大量文件或定时任务。
首先我们需要从官网获取目标文件的下载链接。我们可以在官网上下载到一个 experiment_OEX***_data_download_link
的文件,这个文件中包含了我们需要下载的所有文件的链接。
主要信息有:
project_id
:项目 IDexperiment_id
:实验 IDsample_id
:样本 IDrun_id
:运行 IDdata_id
:数据 IDsecurity
:安全性fileName
:文件名url
:下载链接ftp_file_path
:FTP 文件路径MD5
:文件的 MD5 值其中,ftp_file_path
是我们需要下载的文件的路径,url
是我们可以直接下载的链接。
如果文件均小于 200MB,我们可以直接使用 wget
和 axel
命令来下载,这样是最快速便捷的。可惜,单细胞的数据都在 15G 以上,所以我们需要使用 SFTP 来下载。
以下脚本下载一组指定文件:
#!/bin/bash
USER="用户名"
PASSWORD="密码"
HOST="主机地址"
REMOTE_DIR="/path/to/remote/dir"
LOCAL_DIR="/path/to/local/dir"
MAX_JOBS=5 # 最大并行任务数
files_num=$(wc -l < dw_links.txt)
if [ -f "dw_links.txt" ]; then
while IFS= read -r REMOTE_PATH; do
REMOTE_PATH=$(echo $REMOTE_PATH | xargs) # 去除多余的空格
FILENAME=$(basename "$REMOTE_PATH") # 提取文件名
echo "Preparing to download $FILENAME from $REMOTE_PATH..."
# 使用 lftp 的 get 命令进行下载
echo "Downloading $FILENAME..."
(
lftp -u $USER,$PASSWORD sftp://$HOST << EOF
# get $REMOTE_PATH -o $LOCAL_PATH/$FILENAME
pget -n 1 $REMOTE_PATH -o $LOCAL_PATH/$FILENAME
bye
EOF
) & # 将下载任务放入后台
# 限制并行任务数
while [ $(jobs -r | wc -l) -ge $MAX_JOBS ]; do
echo "Current running jobs: $(jobs -r | wc -l)"
sleep 1 # 等待任务完成
done
done <dw_links.txt
# 等待所有后台任务完成
wait
else
echo "dw_links.txt doesn't exist!"
fi
&
:将每个下载任务放入后台运行,实现并行。wait
:等待所有任务完成。MAX_JOBS
:设置最大并行任务数,避免过多连接导致服务器拒绝服务,如果pget
设置了 n 参数比如 4, 这里要相应的乘以 4。注意,dw_links.txt
文件中包含要下载的文件列表,每行一个文件路径。脚本会读取该文件并逐个下载。如:
/Public/byRun/OER00/OER0008/OER000883/OER00088390/GBC_C_4_S1_L001_R2_001.fastq.gz
/Public/byRun/OER00/OER0008/OER000883/OER00088387/GBC_C_1_S1_L001_R1_001.fastq.gz
此脚本使用 5 个并发连接递归下载远程目录。
注意事项
Node 转录组数据库为研究者提供了丰富的 RNA 测序数据资源。在 HTTP 无法下载超过 200MB 文件的情况下,SFTP 结合 lftp 成为高效解决方案。通过 sftp 进行基础下载,或利用 lftp 的并行连接功能批量获取多个文件,再配合 Shell 脚本自动化操作,您可以轻松管理大规模数据下载任务。尽管 SFTP 不支持单文件多线程下载,但通过优化多文件并行策略,仍可显著提升效率。希望本文能助您顺利开展转录组研究!
sftp 的 get 命令有一个问题是如果检测到本地文件已经存在就不会下载了,而这个本地文件不一定是完整的。我们可以使用 -a
参数来强制覆盖本地文件,但是我们需要先效验文件的完整性,而我们从官网下载到的 experiment_OEX***_data_download_link
文件中是有文件的 md5 值。
我们可以使用 md5sum
命令来计算文件的 md5 值,命令如下:
# 检查 dw_links.txt 是否存在
REMOTE_DIR="/path/to/remote/dir"
LOCAL_DIR="/path/to/local/dir"
LOCAL_MD5_RECORD="$LOCAL_DIR/local_md5_record.txt"
MD5_FILE="/path/to/md5_file.txt"
MAX_JOBS=5 # 最大并行任务数
if [ -f dw_links.txt ]; then
# 逐行读取 dw_links.txt 中的路径
while IFS= read -r REMOTE_PATH; do
REMOTE_PATH=$(echo $REMOTE_PATH | xargs) # 去除多余的空格
FILENAME=$(basename "$REMOTE_PATH") # 提取文件名
echo "Preparing to download $FILENAME from $REMOTE_PATH..."
# 检查文件是否已存在并校验
if [ -f "$LOCAL_PATH/$FILENAME" ]; then
if grep -q "$FILENAME" "$LOCAL_MD5_RECORD"; then
echo "$FILENAME already verified. Skipping."
continue
fi
# 计算 MD5 并校验
file_md5=$(md5sum "$LOCAL_PATH/$FILENAME" | awk '{print $1}')
if grep -q "$file_md5" "$MD5_FILE"; then
echo "$FILENAME is valid. Recording MD5 locally."
echo "$FILENAME $file_md5" >>"$LOCAL_MD5_RECORD"
continue
else
echo "$FILENAME exists but failed verification. Deleting."
rm -f "$LOCAL_PATH/$FILENAME"
fi
fi
# 使用 lftp 的 get 命令进行下载
echo "Downloading $FILENAME..."
(
# 使用 lftp 的 get 命令进行下载
# lftp -u $USER,$PASSWORD sftp://$HOST << EOF
# 下载完成后校验 MD5
if [ -f "$LOCAL_PATH/$FILENAME" ]; then
file_md5=$(md5sum "$LOCAL_PATH/$FILENAME" | awk '{print $1}')
if grep -q "$file_md5" "$MD5_FILE"; then
echo "$FILENAME is valid. Recording MD5 locally."
echo "$FILENAME $file_md5" >>"$LOCAL_MD5_RECORD"
else
echo "$FILENAME downloaded but failed verification. Deleting."
rm -f "$LOCAL_PATH/$FILENAME"
fi
fi
) & # 将下载任务放入后台
# 限制并行任务数
while [ $(jobs -r | wc -l) -ge $MAX_JOBS ]; do
echo "Current running jobs: $(jobs -r | wc -l)"
sleep 1 # 等待任务完成
done
done <dw_links.txt
# 等待所有后台任务完成
wait
else
echo "dw_links.txt doesn't exist!"
fi
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有