Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Node 转录组数据库批量下载指南

Node 转录组数据库批量下载指南

原创
作者头像
叶子Tenney
发布于 2025-03-24 08:24:45
发布于 2025-03-24 08:24:45
660
举报

随着转录组研究的深入,研究人员需要从转录组数据库中获取大量的 RNA 测序数据以支持基因表达、选择性剪接等分析。除了我们常用的 GEO(基因表达总库)和 ArrayExpress 数据库,还有一些数据库可以获得 RNA 测序数据比如 Node 转录组数据库 (National Omics Data Encyclopedia, 国家组学数据百科全书:多组学大数据共享平台,Node 数据库)。在本文中,我们将详细介绍 Node 转录组数据库的特点及其批量下载方法,帮助您高效获取所需数据。

本文用到的软件均可以使用 conda 直接下载安装。

一、Node 转录组数据库简介

Node 数据库是一个多组学数据平台,它为研究人员提供了一个集中的数据存储和访问接口,主要包括这些数据类型:

  • DNA 数据:如全基因组测序(WGS)、外显子组测序(WES)、靶向测序等。
  • RNA 数据:如 RNA-Seq 数据(转录组测序)、单细胞 RNA-Seq、非编码 RNA 等。
  • 其他数据:蛋白质组、代谢组、表观遗传学数据等。

下面是官网介绍:

NODE 是一个生物大数据收集平台,包括实验样本信息的收集、序列文件的上传以及结果的分析、共享和下载。NODE 平台由六个主要模块组成:项目、样本、实验、运行、数据和分析。项目和样本是独立的,但可以通过运行进行链接,这样可以实现元数据和序列信息的整合。

help - Node - National Omics Data Encyclopedia

生物医学大数据中心隶属于中国科学院上海营养与健康研究所,致力于 1) 为中国科学院、上海及全国的生物医学研究提供全周期大数据服务,包括数据收集和共享、数据管理和分析;2) 构建数据安全、整合、共享和挖掘的技术框架,加速生物医学数据资源的协作网络;3) 增强国家生物医学大数据系统,促进生命科学数据丰富发现的范式转变,加速生物学、医学、数学和信息技术之间的跨学科融合,提高国家的“融合研究”能力。

National Omics Data Encyclopedia

Node 数据库支持多种下载途径,包括 HTTP 和 SFTP。对于小文件,HTTP 可能是默认选择,但对于超过 200MB 的大文件,HTTP 下载可能受限,此时需要使用 SFTP。

二、在 HTTP 无法下载 200MB 文件时如何使用 SFTP

当文件大小超过 200MB 时,Node 数据库可能出于服务器限制或安全考虑,禁止通过 HTTP 下载。此时,SFTP(Secure File Transfer Protocol)成为理想选择。SFTP 通过 SSH 协议加密传输数据,确保安全性和稳定性,非常适合大文件的批量下载。

1. SFTP 下载工具介绍

以下是常用的 SFTP 下载工具:

  • sftp 命令行工具:Unix-like 系统(如 Linux、macOS)内置的工具,支持交互式文件传输。
  • lftp:功能强大的命令行工具,支持 SFTP、FTP 等多种协议,适合自动化和批量下载。
  • 图形化客户端:如 FileZilla、Cyberduck,提供直观界面,但不适合脚本化操作。
  • 编程库:如 Python 的 Paramiko 或 Node.js 的 ssh2-sftp-client,适用于开发自定义下载脚本。

对于批量下载,命令行工具(如 sftp 和 lftp)因其灵活性和可脚本化特性更为推荐。

2. 使用命令行下载

使用 sftp 基本下载

代码语言:bash
AI代码解释
复制
sftp 用户名@主机地址

连接成功后,可使用以下命令:

  • 下载单个文件:get 远程文件 本地文件
  • 下载多个文件:mget *.txt(支持通配符)

示例:

代码语言:bash
AI代码解释
复制
sftp> get data.fastq /local/path/data.fastq
sftp> mget *.fastq

sftp 适合简单下载,但对于批量任务,操作繁琐,建议使用 lftp。

三、使用 lftp 的 pget 进行多线程下载

lftp 是一个功能强大的文件传输工具,支持 SFTP,并提供多种高级功能。然而,需注意:SFTP 基于 SSH,通常使用单一连接,因此其 pget 命令的多线程下载功能在 SFTP 协议下可能受限。多线程下载(如文件分段并行)更适用于 HTTP 或 FTP(若服务器支持范围请求)。尽管如此,lftp 仍可通过并行连接下载多个文件,从而提升效率。

基本使用
代码语言:bash
AI代码解释
复制
lftp sftp://用户名@主机地址

下载单个文件:

代码语言:bash
AI代码解释
复制
lftp> get remote_file.txt
使用 pget 下载

pget 是 lftp 的一个子命令,通常用于加速下载。对于支持多线程的协议(如 HTTP/FTP),可通过-n参数指定线程数:

代码语言:bash
AI代码解释
复制
lftp -e "pget -n 4 remote_file.txt" sftp://用户名@主机地址

但对于 SFTP,由于协议限制,pget 无法将单个文件分割成多线程下载。因此,若目标是单个大文件,下载仍为单线程。对于支持 ftp 或 http 的服务器,pget 可以显著提高下载速度。

并行下载多个文件

虽然 SFTP 不支持单文件多线程,但 lftp 可以通过设置多个并发连接来同时下载多个文件。配置方法如下:

代码语言:bash
AI代码解释
复制
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 脚本批量下载

Shell 脚本结合 lftp 可以实现自动化批量下载,适合处理大量文件或定时任务。

下载指定文件列表

首先我们需要从官网获取目标文件的下载链接。我们可以在官网上下载到一个 experiment_OEX***_data_download_link 的文件,这个文件中包含了我们需要下载的所有文件的链接。

主要信息有:

  • project_id:项目 ID
  • experiment_id:实验 ID
  • sample_id:样本 ID
  • run_id:运行 ID
  • data_id:数据 ID
  • security:安全性
  • fileName:文件名
  • url:下载链接
  • ftp_file_path:FTP 文件路径
  • MD5:文件的 MD5 值

其中,ftp_file_path 是我们需要下载的文件的路径,url 是我们可以直接下载的链接。

如果文件均小于 200MB,我们可以直接使用 wgetaxel 命令来下载,这样是最快速便捷的。可惜,单细胞的数据都在 15G 以上,所以我们需要使用 SFTP 来下载。

下载指定文件

以下脚本下载一组指定文件:

代码语言:bash
AI代码解释
复制
#!/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 文件中包含要下载的文件列表,每行一个文件路径。脚本会读取该文件并逐个下载。如:

代码语言:plain
AI代码解释
复制
/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 个并发连接递归下载远程目录。

注意事项

  • 服务器限制:并行连接数应根据服务器政策调整,避免超限导致连接失败。
  • 大文件处理:SFTP 下单个大文件无法多线程,若需加速,可检查数据库是否支持 FTP/HTTP 替代协议。

五、总结

Node 转录组数据库为研究者提供了丰富的 RNA 测序数据资源。在 HTTP 无法下载超过 200MB 文件的情况下,SFTP 结合 lftp 成为高效解决方案。通过 sftp 进行基础下载,或利用 lftp 的并行连接功能批量获取多个文件,再配合 Shell 脚本自动化操作,您可以轻松管理大规模数据下载任务。尽管 SFTP 不支持单文件多线程下载,但通过优化多文件并行策略,仍可显著提升效率。希望本文能助您顺利开展转录组研究!

六、篇外

sftp 的 get 命令有一个问题是如果检测到本地文件已经存在就不会下载了,而这个本地文件不一定是完整的。我们可以使用 -a 参数来强制覆盖本地文件,但是我们需要先效验文件的完整性,而我们从官网下载到的 experiment_OEX***_data_download_link 文件中是有文件的 md5 值。

我们可以使用 md5sum 命令来计算文件的 md5 值,命令如下:

代码语言:bash
AI代码解释
复制
# 检查 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 运行nmon使用说明
第一步: 安装:paramiko window安装方法:pip install paramiko
py3study
2020/01/06
1.3K0
NODE高通量数据库基础介绍及其页面规律
National Omics Data Encyclopedia,NODE,国家组学数据百科全书(也太霸气了),是由中科院上海营养与健康研究所及中科院计算生物所PICB 建立的,致力于:
生信技能树
2021/02/03
3.2K0
NODE高通量数据库基础介绍及其页面规律
大神是如何用python对远程服务器进行命令或文件操作的?
pip install fabric或者pip install fabric2,都是安装最新的官方版本。
用户10002156
2023/10/09
3910
大神是如何用python对远程服务器进行命令或文件操作的?
Python 基于Python实现Ftp文件上传,下载
支持FTP文件上传、下载,可以上传目录(分区除外),也可以上传单个文件;可以下载整个目录(/根目录除外),也可以下载单个文件
授客
2019/09/11
5.4K0
Python 基于Python实现Ftp文件上传,下载
python ssh 库 - paramiko and fabric
标题提到两个第三方库,都是可以实现在 python 中执行 ssh 命令。fabric 是在 paramiko 的基础上封装开发的。所以一般场景下 fabric 会更加容易使用。
orientlu
2018/09/13
3.7K0
实践应用|Python自动化连接FTP批量下载指定文件
有个小姐姐要从历史数据日志里根据一定的规则筛选一批数据,这批数据中有对局战场id字段,再根据这些id转化为文件名,连接远程FTP搜索该文件并下载到本地,然后打开文件删除前5行并在第6行行首添加一个字母,最后将该文件后缀名修改。 一天处理50+个这样的文件转化需求,简单算了下,差不多刚好要一天时间吧!!
可以叫我才哥
2021/08/05
1.1K0
【python小脚本】从数据库获取文件路径通过scp下载本地
需要在mysql数据库中查到相关文件的在服务器的路径,然后通过scp来下载相关文件,之前是手动操作,我现在要写成一个脚本
山河已无恙
2023/03/02
2.2K0
python sftp
http://kaifly.blog.51cto.com/3209616/1832200
py3study
2020/01/10
3K0
paramiko模块——ssh远程连接服务器并执行命令
https://www.cnblogs.com/ghylpb/p/12158061.html
GH
2020/03/19
3.1K0
更优雅地远程操作服务器:Paramiko库的实践
​作为一名测试,如果问你工作中和什么工具打交道的比较多,想必大多数人都会毫不犹豫的说服务器吧。
互联网金融打杂
2022/08/01
5950
上传数据到GEO数据库获得GEO号
我自己的笔记主要是参考官方文档:Submitting high-throughput sequence data to GEOHow to upload files to GEO以及我师兄给我写的教程
生信技能树
2022/01/10
2K0
上传数据到GEO数据库获得GEO号
单细胞免疫组库VDJ|从数据下载开始完成cellranger vdj分析(1)
scTCR可以更细致的获取肿瘤免疫微环境的变化,比如单细胞转录组可以获取不同样本,不同分组(癌和癌旁,是否治疗,是否响应)的celltype组成,可以知道哪些celltype发生变化。
生信补给站
2023/08/25
2K0
单细胞免疫组库VDJ|从数据下载开始完成cellranger vdj分析(1)
如何批量下载TCGA公开的转录组、SNV和甲基化数据
下面这个流程是下载这个网站公开数据的方法,使用到的工具是TCGAbiolinks(https://github.com/BioinformaticsFMRP/TCGAbiolinks),
Chris生命科学小站
2023/02/28
8500
如何批量下载TCGA公开的转录组、SNV和甲基化数据
远端FTP文件与本地文件如何进行Diff
FTP 服务器是日常工作中比较常用的一种配置,可用于与外部文件共享。 例如:作为与 A 公司合作的第三方 B 公司,A 公司每天需要获取 B 公司提供的某些关键数据信息,那么 A 公司可以通过何种方式来获取 B 公司的数据信息呢?
Wu_Candy
2022/07/04
7170
学徒抽丝剥茧想搞清楚这个转录组数据问题出在哪里
这个CNP0002454数据集来源的文章:Identification of a 3-Gene Model as Prognostic Biomarker in Patients With Gastric Cancer ,大家可以自行阅读
生信技能树
2023/02/27
4610
学徒抽丝剥茧想搞清楚这个转录组数据问题出在哪里
使用Python批量下载Wind数据库中的PDF报告
最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告。通过相关的条件检索,发现其相关数据有近百条。由于Wind金融数据终端目前并不支持批量下载公司公告(只能逐个点击链接后下载pdf格式的公告)。因此,如果手动点击鼠标逐条下载公告的话,花费几个小时是非常耗时的,特别是如果检索的公告有上千条的话,那小编是绝对会拒绝点击鼠标的。
1480
2019/05/21
7.5K1
【已更新】如何批量下载TCGA公开的转录组、miRNA转录组,蛋白表达谱、SNV、甲基化数据
下面这个流程是下载这个网站公开数据的方法,使用到的工具是TCGAbiolinks(https://github.com/BioinformaticsFMRP/TCGAbiolinks),
Chris生命科学小站
2023/02/28
4590
【已更新】如何批量下载TCGA公开的转录组、miRNA转录组,蛋白表达谱、SNV、甲基化数据
用Go的resty库批量下载公开网站视频
用户可能已经了解了一些爬虫的基础知识,现在想用Go来实现更高效或更复杂的任务。Resty是一个HTTP客户端库,适合处理请求,但下载视频需要考虑不同的因素,比如大文件处理、并发控制、可能的反爬机制等。
华科云商小徐
2025/03/06
620
AI网络爬虫:用kimi根据RSS批量下载播客音频
你是一个Python编程专家,要完成一个批量下载播客音频的Python脚本,一步一步的思考:
AIGC部落
2024/06/24
1500
AI网络爬虫:用kimi根据RSS批量下载播客音频
【TCGA】如何批量下载TCGA公开的转录组、miRNA转录组,蛋白表达谱、SNV、甲基化以及CNV数据
下面这个流程是下载这个网站公开数据的方法,使用到的工具是TCGAbiolinks(https://github.com/BioinformaticsFMRP/TCGAbiolinks),
Chris生命科学小站
2023/02/28
8730
【TCGA】如何批量下载TCGA公开的转录组、miRNA转录组,蛋白表达谱、SNV、甲基化以及CNV数据
推荐阅读
相关推荐
python 运行nmon使用说明
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文