跳转到主要内容

非冗余、压缩、日志记录的基于文件的生物序列存储

项目描述

biocommons.seqrepo

SeqRepo是一个Python包,用于存储和读取本地生物序列集合。该存储库非冗余、压缩和日志记录,使其能够有效地存储和传输多个快照。

简介

具体的、命名的生物序列为变异和由此产生的表型变化的沟通提供了参考和坐标系。存在几个序列数据库,它们之间有显著的重叠,但都使用不同的名称。此外,这些系统通常难以在本地安装。

SeqRepo提供了一个高效、非冗余和索引的生物序列存储系统。客户端使用熟悉的标识符(如NM_000551.3或GRCh38:1)或基于哈希的标识符来引用序列和元数据。该接口支持快速切片大序列的任意区域。

一个“完全限定的”标识符包括一个命名空间,用于区分来自不同来源或序列集的访问号(例如,GRCh37和GRCh38中的“1”)。如果提供了命名空间,SeqRepo会原样使用它;如果没有提供命名空间,且未限定的标识符指向一个唯一的序列,则返回该序列;否则,使用模糊的标识符将引发错误。

SeqRepo在可用的情况下优先使用identifiers.org的命名空间。例如,包括refseqensembl

seqrepo-rest-service提供了一个REST接口和docker镜像。

在Apache License,2.0下发布。

ci_rel | cov | pypi_rel | 变更日志

引用

Hart RK, Prlić A (2020). SeqRepo:一个用于管理本地生物序列集合的系统。 PLoS ONE 15(12): e0239883. https://doi.org/10.1371/journal.pone.0239883

功能

  • 带时间戳的只读快照。
  • 在单个快照和快照之间高效存储序列。
  • 带宽高效的增量更新传输。
  • 快速检索染色体尺度序列的序列片段。
  • 预计算的摘要,可作为序列别名使用。
  • 将外部别名(例如,访问号或像NM_013305.4这样的标识符)映射到序列。

部署场景

  • 本地只读存档,从公共站点镜像而来,通过Python API访问(请参阅镜像文档)。
  • 本地读写存档,使用命令行工具和/或API维护(请参阅命令行界面文档)。
  • 可以链接到应用程序容器的Docker数据-only容器。
  • SeqRepo和refget REST API用于本地或远程访问(请参阅seqrepo-rest-service)。

技术快速浏览

在单个快照内,序列以非冗余压缩的形式存储在仅添加的日志文件系统结构中。使用截断的SHA-512哈希来评估唯一性和作为内部ID。 (摘要截断以提高空间效率。)

使用块GZipped格式(BGZF)压缩序列,这使得pysam能够快速随机访问压缩序列。(可变压缩通常使得随机访问成为不可能。)

序列文件是不可变的,因此可以在快照之间使用硬链接,并消除冗余传输(例如,使用rsync)。

每个序列ID都与sqlite数据库中的命名空间别名关联。例如,如<seguid,rvvuhY0FxFLNwf10FXFIrSQ7AvQ><NCBI,NP_004009.1><gi,5032303><ensembl-75ENSP00000354464><ensembl-85,ENSP00000354464.4>。sqlite数据库可以在发布之间进行修改。

为了校准,包括3个人类基因组组装(包括补丁)和完整RefSeq集合(NM、NR、NP、NT、XM和XP)的最新版本大约消耗8GB。额外快照的最小增量大小约为2GB(用于sqlite数据库,不是硬链接)。

有关更多信息,请参阅docs/design.rst

要求

读取序列存储库需要几个Python包,所有这些包都可在pypi获得。安装应该像这样简单:pip install biocommons.seqrepo

写入序列文件也需要bgzip,它在htslib存储库中提供。Ubuntu用户应使用sudo apt install tabix安装tabix包。

开发和部署都在Ubuntu上。其他系统可能也能工作,但尚未经过测试。欢迎提供使其他系统工作的补丁。

快速入门

OS X

$ brew install python libpq

Ubuntu

$ sudo apt install -y python3-dev gcc zlib1g-dev tabix

所有平台

$ python -m venv venv
$ source venv/bin/activate
$ pip install seqrepo
$ sudo mkdir -p /usr/local/share/seqrepo
$ sudo chown $USER /usr/local/share/seqrepo
$ seqrepo pull -i 2018-11-26 
$ seqrepo show-status -i 2018-11-26 
seqrepo 0.2.3.post3.dev8+nb8298bd62283
root directory: /usr/local/share/seqrepo/2018-11-26, 7.9 GB
backends: fastadir (schema 1), seqaliasdb (schema 1) 
sequences: 773587 sequences, 93051609959 residues, 192 files
aliases: 5579572 aliases, 5480085 current, 26 namespaces, 773587 sequences

# Simple Pythonic interface to sequences
>> from biocommons.seqrepo import SeqRepo
>> sr = SeqRepo("/usr/local/share/seqrepo/latest")
>> sr["NC_000001.11"][780000:780020]
'TGGTGGCACGCGCTTGTAGT'

# Or, use the seqrepo shell for even easier access
$ seqrepo start-shell -i 2018-11-26
In [1]: sr["NC_000001.11"][780000:780020]
Out[1]: 'TGGTGGCACGCGCTTGTAGT'

# N.B. The following output is edited for simplicity
$ seqrepo export -i 2018-11-26 | head -n100
>SHA1:9a2acba3dd7603f... SEGUID:mirLo912A/MppLuS1cUyFMduLUQ Ensembl-85:GENSCAN00000003538 ...
MDSPLREDDSQTCARLWEAEVKRHSLEGLTVFGTAVQIHNVQRRAIRAKGTQEAQAELLCRGPRLLDRFLEDACILKEGRGTDTGQHCRGDARISSHLEA
SGTHIQLLALFLVSSSDTPPSLLRFCHALEHDIRYNSSFDSYYPLSPHSRHNDDLQTPSSHLGYIITVPDPTLPLTFASLYLGMAPCTSMGSSSMGIFQS
QRIHAFMKGKNKWDEYEGRKESWKIRSNSQTGEPTF
>SHA1:ca996b263102b1... SEGUID:yplrJjECsVqQufeYy0HkDD16z58 NCBI:XR_001733142.1 gi:1034683989
TTTACGTCTTTCTGGGAATTTATACTGGAAGTATACTTACCTCTGTGCAAAATTGCAAATATATAAGGTAATTCATTCCAGCATTGCTTATATTAGGTTG
AACTATGTAACATTGACATTGATGTGAATCAAAAATGGTTGAAGGCTGGCAGTTTCATATGATTCAGCCTATAATAGCAAAAGATTGAAAAAATCCATTA
ATACAGTGTGGTTCAAAAAAATTTGTTGTATCAAGGTAAAATAATAGCCTGAATATAATTAAGATAGTCTGTGTATACATCGATGAAAACATTGCCAATA

有关更多信息,请参阅安装镜像

环境变量

SEQREPO_LRU_CACHE_MAXSIZE设置sqlite查询响应缓存的lru_cache最大大小。默认为100万,但也可以设置为"none"以无限大。

SEQREPO_FD_CACHE_MAXSIZE设置在FASTA序列检索期间文件处理器缓存的lru_cache大小。默认为0以禁用任何缓存,但可以设置为特定值或"none"以无限大。使用一个适中的值(>10)将大大提高序列检索的性能。

开发

在OS X上开发

brew install python libpq bash

如果您收到"xcrun:错误:无效的活动开发者路径",则需要安装XCode。请参阅此StackOverflow答案

在Ubuntu上开发

sudo apt install -y python3-dev gcc zlib1g-dev tabix

以下是开始开发的方法

make devready
source venv/bin/activate
seqrepo --version

构建Docker镜像

Docker镜像可在https://hub.docker.com/r/biocommons/seqrepo找到。标记对应于数据的版本,而不是seqrepo的版本,因为目的是使依赖于本地seqrepo 文件的版本变得简单。每个Docker镜像都是seqrepo的安装,下载相应的seqrepo数据版本。当与Docker卷一起使用以提供持久性时,这为将seqrepo数据纳入Docker堆栈提供了一种简单的方法。

构建

cd misc/docker
make 2021-01-29.log  # builds and pushes to hub.docker.com (i.e., you need creds)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源代码发行版

biocommons.seqrepo-0.6.9.tar.gz (103.1 kB 查看哈希值)

上传时间 源代码

构建发行版

biocommons.seqrepo-0.6.9-py3-none-any.whl (39.5 kB 查看哈希值)

上传时间 Python 3

由以下组织支持