下一代测序数据的存储、传输和压缩的制作方法

文档序号:14013927阅读:296来源:国知局

对临时申请的优先权引用

本申请要求由shailubliner、ariekeshet和eransegal于2015年5月21日提交的、名称为“compressionofgenomicsfiles(基因组文件的压缩)”的美国临时申请no.62/164,611的优先权,由此将该申请的内容全部结合在本文中。

本申请还要求由发明人dannysade和ariekeshet于2015年5月21日提交的、名称为“storageofcompressedgenomicsfiles(压缩基因组文件的存储)”的美国临时申请no.62/164,651的优先权,由此将该申请的内容全部结合在本文中。

本发明涉及下一代测序数据的高效存储和传输。



背景技术:

在过去的十年里,技术的巨大进步和下一代测序(ngs)的采用使得测序成本迅速下降到在2015年人类全基因组高覆盖度测序的价格为$1,000的程度。与此同时,规模也快速发展,在2014年就已经测序了228,000个个体的基因组。近年来,全球ngs容量每7个月就翻一翻,并且预计在短期到中期的将来将继续每12个月翻一翻。

ngs到2025年正以预计每年增加至2-40艾字节(exabyte)的速率生成原始数据,这使所有其它科学和技术领域都黯然失色。然而,这些原始数据在意味着通过下游处理而进行还原的同时还广泛地共享并几乎总是进行存档。因此,这些原始数据的存储、传输和管理给ngs的继续发展带来了技术和经济上的挑战。数据压缩已经被证明在许多技术领域中都是极有价值的工具,并且它将在ngs中起到关键作用。

原生ngs数据格式

大多数ngs数据都根据少数几个事实标准之一存储在文件中。参照图1,图1是示例性fastq机器输出读段(read)、示例性比对(alignment)以及代表该示例性比对的示例性sam文件的现有技术图示。

fastq是用于存储ngs机器的输出数据的事实标准文件格式。fastq文件是基于文本的,并且每个机器输出读长都由四个文本行代表,如图1所示。第一行以字符“@”开始,随后是读段标识符和可选的描述。第二行包含读段的碱基—a、c、g、t或n(未确定)。第三行以字符“+”开始,该字符“+”随后是可选的与第一行中的读段标识符相同的读段标识符。第四行对第二行中的碱基的质量评分(qualityscore)进行编码并且必须具有相同长度。质量评分代表在对应碱基中被编码成可打印字符的根据弗瑞德标准(phredscale)的对应碱基的估计出错概率。

sam(序列比对/映射)和bam(二进制比对/映射)是用于存储短读段比对程序如bwa和bowtie的输出的事实文件格式。sam指定一文本格式,该文本格式由可选的标题区段和随后的一个或多个比对区段构成,比对区段均报告一个读段的比对,如图1中所示。每个标题区段的行或记录以字符“@”开始,随后是双字母记录型编码。一个例外是用于注解,每个记录由tab界定的一系列数据段构成。每个这种数据段都遵循格式“tag:value(值)”,其中tag是限定“value(值)”的格式和内容的两字符的串。各种标题记录类型提供关于如下的信息:

·文件的格式版本和比对区段的分类顺序;

·用于该比对的参考基因组的名称、长度和指针;

·产生文件中的读段组的测序运行(以组织、平台、日期识别);以及

·产生sam文件的程序。

允许用户限定附加类型的标题记录和数据段。

每个比对区段由代表一个读段的比对结果的一行文本构成,如图1中所示。读段r001/1和r001/2是一个读段对,r003是嵌合读段,而r004代表剪接比对(splitalignment)。将小写字母的碱基从比对中剪除。将两个sam文件行剪接起来,其目的是容易阅读。

比对区段包含提供关于如下的信息的11个强制字段。

·读段的名称(它可能出现多次,每个候选映射出现一次);

·报告同伴配对读段的比对的标志;

·映射该读段所相对的参考基因组的名称;

·该读段在参考基因组中的估计位置;

·映射决策的质量(或概率或错误);

·报告读段和参考基因组之间的失准(插入或删除)的“cigar”串;

·参考基因组,相对于该参考基因组映射同伴配对读段;

·同伴配对读段在上述参考基因组中的位置;

·产生该配对读段的dna片段的长度;

·读段碱基序列(当出现在fastq文件中时);以及

·fastq文件中的读段碱基的质量评分。

(为了容易阅读,从图1的示例中省略了质量评分)。还限定了几个可选的比对区段字段。

bam是sam的压缩版本。bam是通过将sam文件分成高达64字节的块,然后将每个块压缩成gzip文档,并且将这些文档连结而创建单个输出文件而创建的。为了支持对bam文件的随机读取操作,还可以创建同伴bam索引(bai)文件。为此,sam文件中的比对区段必须在基因组中以位置排序,并且bai文件包含将基因组内的位置或范围有效地映射到相关gzip块或多个gzip块的bam文件中的偏移的数据结构。

压缩算法

许多算法都形成了无损ngs数据压缩方案的基础。

用于ngs数据压缩的一个算法是字替代。数据格式内的字段(也被称为符号)有时可能比对其字母表进行编码严格需要的位数—它能够采取的一组值—长。在这种情况下,可以从字母表的每个字母到将被结合到压缩格式内的较短对应字段的值限定一对一映射。例如,fastq使用字节来对四个dna碱基或未定义读出数(n)中的任一个进行编码。该组五个字母可以由正好3位来编码。因为3位实际上能够代表8个不同字母,因此可以通过使用7位对三个一组的碱基进行编码以提高压缩比,从而将效率从5/8提高到53/73(125/128或98%)。

用于ngs数据压缩的另一种算法是概率-权重编码。在符号的字母表的字母以不均等但是已知的概率出现的情况下,压缩率的提高能够超过通过字替代可实现的水平。霍夫曼编码(huffmancoding)将符号映射到可变长度编码字,从而较短的编码字代表较高概率的字母,反之亦然。

参照图2,图2是示例性霍夫曼编码二叉树的现有技术图示。在图2所示的示例中,符号a、b和c出现的概率分别为0.5、0.25、0.25。当这些被分别编码为0、10和11时,霍夫曼编码是最佳的。为了允许清楚地解压,没有编码字可以是另一个编码字的前缀:因此,如果在上述示例中0代表a,对于具有更长编码字的更大字典则所有其它编码字必须以1开始等等。

霍夫曼编码的设计如下:建立二叉树,以一组未连接的叶节点开始,每个叶节点代表符号字母表的字母。在该过程的第一步骤中,形成新的分支节点,以用作具有最低组合概率的两个叶节点的夫节点。新创建的节点被分配其两个子节点的概率的和。针对子树根部处的仍然没有连接的一组节点重复该过程,直到它们全部都被全局根节点连接。现在在根节点处开始,通过给通向父节点的分支的前缀增加0或1而将编码字前缀分配给树的分支。对于图2中所示的单分支节点,传入分支标记为1,传出分支标记为10和11。最后,每个字母通过被分配给通向该字母的分支的编码字进行编码。

现代测序机通常给大多数解码碱基分配高质量评分:对于illumina软件,版本1.8及以后版本,分值“a”至“j”(按弗瑞德标准(phredscale)为32至41)在大多数数据组中比“!”至“@”更普遍。质量评分的霍夫曼编码将压缩比提高到超过了通过字替代所能获得的压缩比(其仅仅利用如下事实:42质量评分字母能够由5.4位而不是8位进行编码)。

霍夫曼编码的设计受到如下事实限制:编码字的长度是离散的;霍夫曼编码仅在所有符号概率为1/2的幂时才是最佳的。对成组符号进行编码能够提高效率,但是在树尺寸内成本以指数增加。在这方面,算术编码是对霍夫曼编码的一个改进。

算术编码基于如下概念:将区间[0,1)分成子区间,一个子区间用于字母表的一个字母。每个区间的长度被设置为等于该区间代表的字母的概率。因此,对于图2中所示的具有符号a、b和c的示例,该组区间可以为[0,0.5),[0.5,0.75)和[0.75,1)。参照图3,图3是用于该示例的算术编码器和解码器的现有技术图示。

算术编码器利用代表区间[0,1)的状态变量进行初始化。读取待压缩的块中的第一符号,并且使区间变窄到代表待编码的符号的子区间,即用于b的[0.5,0.75)。当读取下一个符号时,将当前区间再次变窄以代表对应于第二符号的相关子区间。因此,如果第二符号是a,则将[0.5,0.75)缩小至[0.5,0.625)。针对每个连续符号重复该过程,从而产生永远更窄的区间。在符号块的末尾处,编码器的输出为最终区间内需要最少位数来编码的数字。输出位数将与最终区间的大小成反比,因此与块中的字母的联合概率成反比。

算术解码器也设置有字母与区间的映射。如图3中所示,解码器以确定编码器输出落入的[0,1)内的字母区间开始。该区间代表第一解码符号即b。解码器现在通过将字母区间和区间内的输入线性映射回到[0,1)来“将b拉出”解码器输入。例如,如果编码器输出为0.51,则将代表b的区间[0.5,0.75)向回缩放至[0,1)而将编码器输出映射到0.04((0.51-0.5)/(0.75-0.5))。针对新计算出的编码字(0.04)重复该过程,直到已经解码规定数量的符号。

算术编码的实际实现被设计成从编码器和解码器产生中间输出或临时输出。因此,利用有限的存储器要求和延迟能够对任意长的符号序列进行编码和解码。

公知的是,大多数生物体的dna具有不等比例的四个碱基(例如,对于人类基因组中的a、t、c和g来说,近似为0.3、0.3、0.2和0.2)。算术编码利用该信息对fastq读段的碱基进行压缩。

用于ngs数据压缩的又一种算法是语境编码(contextencoding)。在许多情形下,待压缩的符号块中的符号值将在统计上与之前符号或多个符号的值关联。例如,沿着读段的质量评分将倾向于从一个符号到下一个符号表现出相对较小变化。语境编码利用该信息来提高压缩比。

当对符号进行处理时,可以指令霍夫曼或算术编码器从多个概率分布(多组字母可能性)拾取一个概率分布。如果该选择是基于对解码器也可获得的信息进行的,则编码器和解码器可以步调一致地运行并且确保对原始符号进行正确重构。例如,过去的符号将总是由解码器进行解码,并且因此能够形成这种用于编码的语境。

返回到fastq文件中的质量评分行的示例,并且谨记质量评分倾向于在读段上缓慢改变,“j”后面很可能跟随“j”。因而,对跟随“j”的符号进行编码最好可以利用以“j”为峰值的概率分布进行,而跟随其它字母的符号可以使用不同的分布。只要编码器和解码器设置有同一组规则,则它们使用相同概率分布并且因此保持同步。

例如通过使用多于一个的过去符号来对语境进行完善可以改进概率模型的精度。然而,这是以付出编码器和解码器的存储器为代价的。如果不使用语境,则质量评分的概率分布必须指定42个条目(entry)。以一个过去质量评分符号作为语境,这增加至422,从而随着语境符号的数量以指数增加。

用于ngs数据压缩的再一种算法为自适应编码。在大多数情形下,符号概率分布并不是精确已知的。继续以质量评分为例,尽管赋予高值的偏态分布最有可能比均匀分布更好地代表数据,但是其形状将随着测序机模型和样本特征而变化。可以增强算术编码以适应于先天未知的符号概率。

为了进行自适应操作,算术编码器为符号字母表的每个字母保持运行计数表。当自适应地实现语境编码时,为每个语境保持单独的这种表(即,每个可能的一组语境符号值)。在对某一语境中的符号进行编码之前,通过将每个当前条目除以所有表条目的和而将该语境表的当前条目转换成概率测度。这些概率用来如以上所述那样对符号进行编码,随后使刚刚编码的字母的计数增加。在开始时,将这些表初始化为代表均匀概率分布的均匀(小)计数或另一种估计分布。采用固定的确定性规则对表条目的规模进行周期性缩减以避免溢出。解码器维持类似地初始化和标准化的类似表,并且使用每个解码符号来更新对应的计数。这确保了编码器和解码器以协同方式操作,从而自适应于实际符号概率分布,而无需在压缩数据中包含任何边信息。

用于ngs数据压缩的再一种算法是字典编码。由一类兼容无损压缩算法生成的zip文件格式是已知的字典编码的最好示例。其流行性来源于其对许多类型数据的相当好的性能,而无需任何关于该数据的特征或在先信息。

如其名所暗示的,字典编码器建立并维持该字典编码器之前在输入数据中遇到的数据序列的字典。在编码过程期间的任何点,编码器都将搜索与下几个待编码字符匹配的最长字典条目。然后,其将:(i)通过索引将这些输入符号编码成匹配条目的字典;(ii)向从与紧接着符号相连的上述匹配条目创建的字典中添加新的条目;以及(iii)继续处理以紧接着匹配条目的符号开始阀输入数据。在初始化时,该字典必须包含用于符号的字母表的每个字母的条目。字典维护算法必须与编码并行地运行以将其大小保持在预定限度内。

例如,处理二进制流01000011…的字典编码器必须以用于0和1的字典条目进行初始化,并且在编码过程中将添加字典条目01,10,00,000,011…,同时输出字典条目的索引0,1,0,00,01…。解码器通过索引对字典查找表进行逆向操作。只要其采用用于字典条目添加的相同规则和相同的维护算法,则其将能够维持将与编码器的字典一致的字典副本。

fastq压缩

fastq文件经常通过zip兼容软件诸如gzip进行压缩,这种zip兼容软件通常实现2.5到3.5的压缩比。与其它类型的数据一样,针对其具体特征调整压缩算法将改进压缩。

g-sqz将每个fastq碱基与其对应的质量评分配对,并且使用霍夫曼编码对组合的两部分符号进行编码。在第一遍经过该文件的过程中,确定所有可能的对值的频率分布,作为霍夫曼编码的基础,在第二遍期间使用该霍夫曼编码对读段和质量评分行的内容进行编码。读段标识符利用相邻标识符中重现的字段单独编码。

kungfq和fqc使用这样的方案,该方案基于分开地预处理标识符、读段和质量评分行;合并三个中间流;并且利用zip兼容编码器压缩该结果。符合特定流行格式的标识符进行德尔塔编码,但是在其它情况下保持不变。质量评分通过行程长度代码进行编码:将长重复编码成质量评分和重复数量。碱基通过三符号字替代或行程长度代码进行编码。

dsrc2实现压缩方案旋转:碱基通过字替代、霍夫曼编码或算术编码中的任一个进行编码。质量评分通过如下一个进行编码:在读段内的位置的情况下,霍夫曼编码;在之前符号或符号行程长度的情况下,霍夫曼编码;或者在之前符号的情况下,算术编码。

scalce试图识别在来自于高覆盖样本的重叠读段中存在的冗余。为此,其使用局部一致解析(lcp)来在编码之前对读段进行预处理:对于每个读段,lcp识别与其它读段共享的最长子串(或多个子串)。基于共享串将读段形成蔟,并且在该蔟内通过共享串在读段内的位置排序。最后,通过zip兼容编码器以上述排序对读段进行编码。

quip执行将读段短序列组装(没有参考基因组的组装)成“重叠群”,该重叠群是dna的相对较长的连续区段。然后针对读段在重叠群内的位置对读段进行编码。短序列组装通常依赖于德布鲁因图(debruijngraph)并且是存储器密集型的。quip使用更高效的概率数据结构,代价是k-mer计数偶尔会计算错误。这些都导致失败组装,但是仅仅意味着少数受影响的读段的编码效率较差。

当fastq文件包含来自于已知生物体的读段时,则如果读段:(i)能够被映射到该生物体基因组中的正确位置;并且(ii)包含有限数量的突变或测序错误;则读段的碱基序列可以通过其在参考基因组内的位置和它们之间的一组错配的组合而高效地进行编码。这被称为基于参考的编码。

slimgene和samcomp(一种压缩算法)读取关于读段与参考基因组的映射的报告的sam/bam文件,并且将读段映射位置和错配编码为操作码和偏移值的组合。

fastqz和lw-fqzip包括“轻权”映射器,该轻权映射器试图发现每个读段在参考基因组中的位置。映射是基于创建在参考基因组中出现的k-mer的索引进行的。对于索引中存在的k-mer,一个碱基一个碱基地扫描每个读段,并且如果发现匹配,则将读段的剩余部分与参考基因组进行比较以识别错配。

为了对标识符、未映射读段和质量评分进行编码,fastqz使用zpaq,zpaq是一种包括复杂语境建模工具箱的算术编码软件。zpaq是逐位(bit-by-bit)编码器,并且由于其复杂的语境建模算法而进一步变慢。为了加速编码和解码,fastqz包括预处理步骤,该预处理步骤对标识符中的重复前缀做标记并且对质量评分值的行程进行预先编码。

bam压缩

与fastq一样,特殊调整的算法使bam压缩比的改善超过了gzip。

samzip使用德尔塔、霍夫曼和行程长度编码的组合分开地优化每个比对区段标签的编码。对质量评分进行行程长度编码。

ngc假定参考基因组的可获得性,并且仅对碱基错配进行编码。这是通过“垂直地”横穿读段序列进行的,即以参考基因组中的位置为顺序并且随后读取比对位置(即读段的开始位置)进行的。对错配进行行程长度编码。

deez利用算术编码器对质量评分进行编码。对于读段序列,deez假定读段与其在参考基因组上的映射地点之间的碱基中的大多数差异是由于突变(而不是测序错误)引起的,因此与映射到相同地点的其它读段共享。deez获得映射到特定地点的读段的“共有序列”并且仅对共有序列重叠群和参考基因组之间的差异编码一次。

cram定义一组编码算法,该组编码算法可用来对不同的sam字段进行编码。该组编码算法包括贝塔(字替代)、行由计数或停止值限定的行程长度、霍夫曼、艾利亚斯伽马(指数)、次指数(线性和指数子范围)和golomb(哥伦布)或golomb-rice(哥伦布-赖斯)编码。另外,cram允许使用外部数据用于rans、不对称数值系统编码的范围编码器变量。

adam是将一组bam文件的格式重新确定为类似于柱状数据库的数据结构若干方案之一。这加速了横跨多个文件对与基因组中的给定区域进行比对的读段的搜索。柱状布置意味着文件中和横跨文件的类似字段现在是相邻的,从而提供更高效地表示的机会。然而,adam及类似方案与bam不兼容,需要在所有相关应用中对文件操作进行重写。



技术实现要素:

无损压缩是解决ngs数据的庞大体量中固有挑战的价值不可估量的工具。

本发明的各种实施方式以高压缩比和快速处理速率对fastq文件进行无损压缩,并且对于应用透明的基础结构产品十分有效。

标识符、读段序列和质量评分线由单独调整的算法进行压缩,将这些算法的输出组合成单个压缩文件。

标识符压缩完全通用,但是针对最普通格式变化进行优化。将标识符令牌化,并且针对诸如重复和常数递增之类的公共形式对这些令牌进行分析。然后对结果进行算术编码。

内部快速映射器将读段序列映射到参考基因组。该映射器比bwa和bowtie快若干数量级,然而对于现实数据来说实现典型的95%的成功率。对于不是来自已知生物体的样本以及对于未映射的读段,编码器使用多变量、dna序列优化的算法编码器。

质量评分由自适应算术编码器进行编码,该自适应算术编码器使用复杂多变量语境,该复杂多变量语境尤其包括之前评分、读段中的位置和不同测序机技术的特定特征。

本发明的实施方式以串流模式执行编码和解码。这使得存储服务器、云服务器和输送器利用文件服务进行管道编码/解码,从而减小到最小启动延迟和应用响应时间。

本发明的另选实施方式对bam文件进行无损压缩,大幅度降低他们的大小以进行存储和输送。这些实施方式通过利用未修改的原生格式bam文件给对于应用来说保持透明的基础结构产品提供服务而对于这些基础结构产品来说是有利的。

使用单独调整的算法对各种bam标签值字段进行编码。

通过基于参考的编码有效地消除了在读段和比对/映射标签之间存在的冗余,而无需存在在创建bam文件时原始使用的参考基因组。

质量评分利用多变量语境、自适应算法编码器进行编码。本发明解决了一方面为了训练复杂自适应编码器所需的大编码块尺寸与另一方面对文件读段进行有效随机访问所需的小块尺寸之间的固有矛盾。

因此,根据本发明的一个实施方式提供了一种用于下一代测序(ngs)数据的存储、传输和压缩的计算机设备,该计算机设备包括:前端接口,该前端接口通过第一存储访问协议与客户端计算机通信;后端接口,该后端接口通过第二存储访问协议与存储系统通信;压缩器,该压缩器借助于所述前端接口从在所述客户端计算机上运行的应用接收原生ngs数据,将所述原生ngs数据的压缩形式添加至编码数据文件或数据对象的一部分中,并且借助于所述后端接口将所述编码数据文件或数据对象的所述一部分存储在所述存储系统中;和解压器,该解压器借助于所述后端接口从所述存储系统接收编码数据文件或数据对象的一部分,将所述编码数据文件或数据对象的所述一部分解压以由此生成原生ngs数据,并且借助于所述前端接口将所述原生ngs数据发送至所述客户端,以供在所述客户端上运行的所述应用使用。

另外,根据本发明的一个实施方式,提供了一种存储指令的非暂时性计算机可读介质,所述指令在由计算机设备的处理器执行时致使所述处理器:响应于从在客户端计算机上运行的应用接收写请求,从所述应用获得原生ngs数据;从存储系统读取编码数据文件或数据对象的一部分;对所述编码数据文件或数据对象的所述一部分进行修改,包括将所述原生ngs数据的压缩形式添加至所述编码数据文件或数据对象的所述一部分中;并且发送所述编码数据文件或数据对象的修改部分以在所述存储系统中进行存储;以及响应于从所述应用接收读请求:从所述存储系统读取编码数据文件或数据对象的一部分;对所述编码数据文件或数据对象的所述一部分进行解压并由此生成原生ngs数据;并且将所述原生ngs数据发送至所述应用。

附图说明

从如下结合附图给出的详细描述将更充分地理解和认识本发明,其中:

图1是示例性fastq机器输出读段、示例性比对和代表该示例性比对的示例性sam文件的现有技术图示;

图2是示例性霍夫曼编码二叉树的现有技术图示;

图3是示例性算术编码器和解码器的现有技术图示;

图4是根据本发明的一个实施方式的用于存储、传输和压缩下一代测序(ngs)数据的系统的简化框图;

图5是根据本发明的一个实施方式的由图4的系统运行的过程和线程的简化框图;

图6是根据本发明的一个实施方式的用于缓存的fastq和bam文件的五个状态的状态转换图;

图7是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行write操作的方法的简化流程图;

图8是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行read操作的方法的简化流程图;

图9是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行createdirectory操作的方法的简化流程图;

图10是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行deletedirectory操作的方法的简化流程图;

图11是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行renamedirectory操作的方法的简化流程图;

图12是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行createfile操作的方法的简化流程图;

图13是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行deletefile操作的方法的简化流程图;

图14是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行renamefile操作的方法的简化流程图;

图15是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行readdirectorycontent操作的方法的简化流程图;

图16是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行readfileattributes操作的方法的简化流程图;

图17是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行writefileattributes操作的方法的简化流程图;

图18是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行readfilesysteminformation操作的方法的简化流程图;

图19是根据本发明的一个实施方式的用于原生ngs数据的两遍压缩的的方法的简化流程图;

图20是根据本发明的一个实施方式的用于原生ngs数据的状态压缩的方法的简化流程图;

图21是根据本发明的一个实施方式的用于原生ngs数据的两遍比对压缩的方法的简化流程图;

图22是根据本发明的一个实施方式的用于本地ngs数据的字段外语境压缩的方法的简化流程图;

图23是根据本发明的一个实施方式的用于原生ngs数据的基于排序的压缩的方法的简化流程图;

图24是根据本发明的一个实施方式的用于对原生ngs数据进行并行处理压缩的方法的简化流程图;

图25是根据本发明的一个实施方式的用于对原生ngs数据进行基于条码的压缩的方法的简化流程图;

图26是根据本发明的一个实施方式的用于对原生ngs数据进行重复数据删除(de-duplication)压缩的方法的简化流程图;和

图27是根据本发明的一个实施方式的图4的设备的硬件形式的图示,示出了前面板和后面板接口;

图28是根据本发明的一个实施方式的用于图27的硬件设备的示例性ip地址配置;以及

图29是根据本发明的一个实施方式的由图27的硬件设备输出的概要信息的样本。

为了对附图进行参考,提供元件及其编号的如下索引。类似编号的元件代表相同类型的元件,但是它们无需是相同元件。

以1000和2000编号的元件为流程图的操作。

在整个说明书中采用如下定义。

aligner(比对器)—一种软件或硬件处理器,该软件或硬件处理器作为输入接收机器输出文件并作为输出生成比对文件,该比对文件从所述机器输出文件中的读段重构完整na分子的结构,所述读段来自于该na分子。

alignmentfile(比对文件)—对于机器输出文件中的每个读段,该文件包含在na分子(读段来自于该na分子)内的位置以及读段与分子中的位置之间的任何差异。

bam—文件格式,该文件格式为sam文件的标准压缩形式。

base—核酸中的一个核苷酸。因而,dna由一串碱基构成,每个碱基为四种类型a、c、g和t中的一种。

encodeddatafile/dataobject(编码数据文件/数据对象)—数据文件(用于基于文件的存储系统)或数据对象(用于基于对象的存储系统),该数据文件或数据对象包含通过对原生ngs数据文件或数据对象进行压缩而产生的压缩ngs数据。

fastq—用于机器输出文件的标准文件格式。

field—在原生ngs数据文件或数据对象中的数据值的连续序列,对于该序列来说,所有值代表相同类型的信息。例如,读段字段包含代表由测序机器识别的na碱基的一串值。

machineoutputfile(机器输出文件)—包含由测序机器的测序操作产生的数字数据的文件。机器输出文件可以由测序机器生成,或者可以是对机器的直接输出进行格式转换的结果。例如,由加利福尼亚圣地亚哥的illumina公司的测序机器生成bcl格式的机器输出文件,并且这些文件可以转换成fastq格式的机器输出文件。

na—核酸,脱氧核糖核酸(dna)或者核糖核酸rna。

nativengsdatafile/dataobject(原生ngs数据文件/数据对象)—包含标准ngs格式的基因组数据的数据文件或数据对象。该文件中的数据可以进行解压,诸如特别是fastq和sam格式,或者进行压缩,诸如特别是bam格式。

portion(一部分)—作为原子单位压缩的文件部分,从而可以单独对该一部分进行解压以读取原生ngs数据。

qualityscore(质量评分)—由测序机器产生的数据值,该数据值代表机器对碱基的错误概率的估计。质量评分和读段中的碱基之间的对应关系取决于文件格式。

读段—机器输出文件和比对文件中的字段,该字段包含由测序机器识别的na碱基。

referencena(参考na)—由比对器使用以确定读段位置和任何差异的预定成分的na。参考na被提供给比对器并且在比对文件中报告。例如,人类dna可以使用参考人类dna进行比对。

sam—用于比对文件的标准文件格式。

section(区段)—机器输出文件或比对文件的包含特定类型的一组排序字段的部分。因而,fastq格式的机器输出文件的区段包括标签字段、读段字段和质量评分字段。bam和sam格式的比对文件包括标题区段,之后是一个或多个比对区段

slice(片段)—机器输出文件或比对文件的包含特定类型的所有字段的逻辑部分。因而,机器输出文件可以在逻辑上分成包含标签的片段、包含读段的片段和包含质量评分的片段。

tag—机器输出文件的字段类型,该字段类型包含关于测序机器以及产生该机器输出文件和包括该标签的区段的测序过程的信息。

附录列表

附录a是根据本发明的一个实施方式的用于图5的处理线程的伪代码列表。

具体实施方式

根据本发明的实施方式,提供了用于下一代测序(ngs)数据的存储、传输和压缩的系统和方法。

参照图4,图4是根据本发明的一个实施方式的用于下一代测序(ngs)数据的存储、传输和压缩的系统的简化框图。图4的系统包括四个主要部件,即:计算机设备100、一个或多个客户端计算机200、存储系统300和缓存(缓冲存储器)系统400。设备100作为客户端计算机200和存储系统300之间的媒介。客户端计算机200包括处理器210,该处理器210运行对原生ngs数据进行处理的ngs应用220。存储系统300包括管理数据存储器320的处理器310。存储系统300可以是网络附加存储(nas),并且可以是使用文件访问协议和存储编码数据文件的基于文件的系统,或者是使用对象存储协议和存储编码数据对象的基于对象的系统,或者在当今使用或者在将来使用以存储ngs数据的其它这种存储系统。缓存系统400包括管理ngs数据缓存320的处理器410。

使用缓存使得能够进行“分层存储”。如果缓存400例如通过使用固态硬盘驱动器而具有比存储系统300快的访问时间,则从缓存400进行读取比从存储系统300进行读取快,这是因为它们不需要解压以及快速存储介质。

尽管没有在图4中示出,但是计算机设备100、客户端计算机200、存储系统300和缓存系统400中的每个都包括执行下面描述的各种操作所需以及与彼此通信所需的一个或多个存储模块、数据总线和发射器/接收器。

设备100包括使用第一存储访问协议诸如尤其是文件访问协议或对象存储协议与客户端计算机200通信的前端接口120。在本发明的一些实施方式中,前端接口120是网络文件系统(nfs)接口。设备100还包括使用第二存储访问协议诸如尤其是文件访问协议或对象存储协议与存储系统300进行通信的后端接口130。在本发明的一些实施方式中,该后端接口130是swift(斯威夫特)对象存储接口。第一和第二存储访问协议可以是相同协议或不同协议。

设备100还包括压缩器140和解压器150。设备100给客户端计算机100提供若干服务,包括采取对ngs应用220来说透明的方式的ngs数据自定义压缩。具体地说,使用设备100作为媒介,ngs应用220处理原生ngs数据,而存储系统300存储编码ngs数据文件或数据对象。

压缩器140被编程为经由前端接口120从应用220接收原生ngs数据,将该原生ngs数据的压缩形式添加到编码数据文件或数据对象的一部分中,并借助后端接口130在存储系统300中存储该部分编码数据文件或数据对象。解压器150被编程为经由后端接口130从存储系统300接收一部分编码数据文件或数据对象,将该部分编码数据文件或数据对象解压以由此生成原生ngs数据,并且经由前端接口120将原生ngs数据发送至客户端200,供应用220使用。

本领域技术人员将认识到,图4的架构有许多变型,这些变型是题述发明的另选实施方式。因而,代替驻留于单独的缓存系统400中或除了驻留在单独的缓存系统400中之外,ngs数据缓存420可以驻留在设备100中、客户端计算机200中或存储系统300中。设备100、客户端计算机200、存储系统300和缓存系统400可以是单独的计算系统,或者是一个或多个相同计算机系统的多个部分,在这种情况下,处理器110、210、310和410中的两个或更多个可以是同一处理器。设备100可以是客户端计算机200的一部分或者存储系统300的一部分,而不是单独的计算机。

在本发明的基于云的实施方式中,设备100是在云环境(诸如由华盛顿州西雅图亚马逊技术公司(amazontechnologies,inc.)提供的云环境)中运行的虚拟设备,客户端计算机200是诸如由亚马逊提供为弹性计算云(ec2)实例之类的虚拟计算机,存储系统300是诸如由亚马逊提供的简单存储服务(s3)之类的云存储系统,而缓存400是基于云的存储系统,诸如由亚马逊提供的弹性块存储(ebs)服务。在本发明的基于云的实施方式中,前端接口120使用第一存储访问协议诸如尤其是文件访问协议或对象存储协议通过虚拟私有云(vpc)局域网(lan)与客户端计算机200通信。在本发明的一些实施方式中,前端接口120是网络文件系统(nfs)接口。在本发明的基于云的实施方式中,后端接口130使用第二存储访问协议与云存储系统300通信。在本发明的一些实施方式中,后端接口130为亚马逊s3接口。设备100给虚拟计算机200提供nfs服务器接口,该nfs服务器接口允许未修改的可移植操作系统接口(posix)兼容的应用220对原生ngs文件进行读和写。

根据本发明的实施方式,设备100是压缩文件服务器,该压缩文件服务器管理任何第三方nas300上的fastq优化和bam优化的压缩文件系统。

根据本发明的实施方式,设备100作为“缆线焊块(bump-in-the-wire)”对用户应用220和nas300之间的文件服务连接进行操作。设备100可以使用nfs后端接口130来利用nas上的专用存储容量对压缩文件系统进行管理,并且使用给应用提供文件系统服务的nfs前端接口120。fastq文件和bam文件以压缩格式存储在nas300上,而用户应用以它们的原生格式对相同文件进行读和写,其中设备100执行即时(on-the-fly)压缩和解压。fastq和bam之外的文件类型以它们原生的未修改格式通过设备100。

本发明的实施方式支持nfs版本3。在udp和tcp上支持mount程序。其它nfs程序在tcp上支持。

准备设备100涉及:(i)配置nas以向设备100输出由设备100管理的文件系统的子树;和(ii)配置客户端计算机200从设备100安装同一个子树。

常驻nas的压缩文件系统是posix兼容的,并且可以使用现有的通用工具和最佳作法进行架构、准备、备份或以其它方式管理。

设备100用作远程程序调用(rpc)代理,该远程程序调用代理用于与客户端计算机对该nas的相关部分的访问相关联的nfs往来。前端接口120终止承载nfs的tcp连接,或者从客户端计算机200接收相关的udp包。设备100对rpc调用和nfs命令进行解析以确定哪个nfs命令可以本质上不修改地通过以及哪个涉及fastq或bam文件操作并因此需要修改。然后将修改的或未修改的nfs命令通过后端接口130转发至nas300。相同的一般程序适用于在相反方向上进行的nfs应答。

大多数nfs命令诸如尤其是对非fastq和非bam文件进行的文件操作没有任何修改地通过设备100而到达任何nfs字段。对这些命令进行的改变包括:(i)在rpc层级处,通过对xid字段进行重写而对调用重新编号,其中在应答中恢复原始值;和(ii)通过以设备100作为它们的源的不同tcp连接或udp包运载对nas300的调用和来自于nas300的应答。

一些nfs命令需要对命令或应答进行附加的nfs层级改变。例如,对报告包含压缩fastq或bam文件的目录的readdir应答进行编辑以显示出未压缩文件。

fastq或bam文件的读或写请求触发压缩器140和解压器150的操作,压缩器140和解压器150使用后端接口130访问nas300以便给该请求提供服务之前对相关文件进行压缩或解压,如下面进一步说明的那样。

基于存储的操作

为了使设备100对ngs应用220来说是透明的,设备100必须从应用220接收原生ngs文件命令,并且将命令发送至存储系统300,对它们进行改编以使存储系统300能够存储编码文件而不是原生ngs文件,从存储系统300接收响应,对它们进行改编,并且将原生文件响应发送给应用220。下面参照图7至图26描述改编具体ngs命令的细节。本领域技术人员将认识到,对于非ngs文件命令,即与原生ngs文件之外的文件有关的命令,设备100仅仅用作客户端200和存储系统300之间的传送器,并进行改编。

前端接口120从fastq或bam文件截取nfsread命令,并将这些nfsread命令排队。前端接口120通知压缩器140和解压器150正在被读取的fastq或bam文件,并且指示迄今为止已经被请求的文件的数据范围。解压器150使用后端接口130读取被压缩的fastq或bam文件以对数据进行解压,并且将结果写到驻留在缓存400中的原生格式fastq或bam文件,并且与压缩文件一一相关联。随着解压的进行,解压器150周期性地向前端接口120传送现在为止已经解压的数据范围。随着read命令继续到来,前端接口120关于所请求的新数据对解压器150进行更新。并行地,当未压缩文件数据变成可用来给排队命名服务时,前端接口120将这些命令转发至缓存400并且将应答中继至客户端计算机200。

read命令和与非fastq和非bam文件有关的应答由设备100透明地传递。

fastq或bam文件的nfscreate和write命令由前端接口120中继至缓存400,作为与预期压缩文件一对一相关联的原生格式fastq或bam文件的命令。通过自最后write命令起的超时来检测文件结尾。在超时时,前端接口120通知压缩器140,该压缩器140将缓存文件压缩成存储系统300中的稳定压缩文件。

到达和来自于非fastq和非bam文件的create和write命令和应答由设备100透明地传输。

未压缩fastq和bam文件—无论是输入到压缩器140还是解压器150的输出—都以它们的原生格式进行缓存,并且用来服务随后的read命令。设备100运行缓存管理过程,该缓存管理过程通过删除当前最少访问文件而将缓存文件总体大小保持在可配置限度以下。

参照图5,图5是根据本发明的实施方式的由设备100的处理器110运行的过程和线程的简化框图。处理器100运行两个主过程,代理过程111和压缩/解压过程112。

代理过程111运行永久服务器线程116,该永久服务器线程116在nfs服务器和挂载端口上监听。服务器线程116创建新的连接线程117以处理每个传入客户端计算机连接。连接线程117为它们的相关连接实现rpc代理功能,包括分别通过传入和传出tcp连接与客户端计算机200和存储系统300通信。

当被客户端计算机nfs命令诸如read或write触发时,从连接线程117通过服务器线程116向压缩/解压过程111发送文件压缩或解压请求。

压缩/解压过程112具有永久主线程118,该永久主线程118从服务器线程116接收文件压缩和解压请求。当接收压缩或解压请求时,主线程118创建执行文件的压缩或解压的新的压缩/解压线程119。

在代理过程111内,服务器线程116和连接线程117使用posix消息队列来传递与fastq和bam文件上的操作有关的信息,诸如尤其是读请求数据范围和解压进度报告。

代理过程111和压缩/解压过程112之间的过程间通信由通过linuxfifo传递的专用消息实现。当需要开始新的fastq或bam文件压缩或解压过程时,代理过程111的服务器线程116向压缩/解压过程112的主线程118发送适当的消息,该主线程118创建新的压缩/解压过程119来执行所请求的任务。从该点开始,在服务器线程116和相关的压缩/解压线程119之间直接交换与压缩或解压有关的消息。

服务器线程116以每个文件为基础合并read请求,并且将结果传送至由相关的压缩/解压线程119读取的fifo。(不同的是,文件write仅涉及一个初始请求,该初始请求触发压缩线程119的创建)。诸如read进度和write完成之类的指示从压缩/解压线程119传送至服务器线程的fifo,并且从该fifo传送到具有与该文件相关的未决请求的所有连接线程117。

设备100创建并管理存储在nas300缓存400上的nfs兼容的压缩文件系统。该压缩文件系统使用原始目录名称镜像原始未压缩文件系统的目录结构。非fastq和非bam文件在压缩系统中以它们的原始名称和它们的原始未修改格式存储在它们的原始位置。

fastq或bam在压缩文件系统由两个文件表示,这两个文件如下:

i.缓存的fastq或bam文件,该文件具有与原始fastq或bam文件相同的名称并且位于与原始fastq或bam文件相同的目录。对于压缩或解压之后的一段时间来说,该文件用作原始文件的缓存副本。在其它时间,其长度被截短至零,但是并不删除。缓存的fastq或bam文件被重新命名和移动以反映在原始fastq或bam文件上执行的任何这种操作。可选地,设备100可以以多种格式中的一种格式给文件提供服务。例如,可以以原生格式或zip压缩格式给fastq文件提供服务。再举例来说,可以以原生格式服务bam文件,或者以如下格式服务bam文件,其中以zip等级0压缩zip块,即压缩数据位于zip存档文件内。在这种情况下,文件由若干别名表示,即文件名称具有不同的扩展名,但是没有数据副本。当应用220想要读取特定格式的文件时,其指定对应的文件扩展名,并且设备100以所请求的格式解压并服务该文件。

ii.当准备设备100时创建的压缩fastq文件,该fastq文件放置在特殊目录内。该文件的名称为代表缓存的fastq文件的nfs句柄的十六进制值的串。由于该名称是缓存的fastq文件的永久nfs文件句柄的简单函数,因此二者之间的关联不会受到后者的重新命名或移动操作的影响。

设备100基于文件和目录的nfs文件句柄对文件和目录进行索引。这使得文件和目录标识可以在它们的寿命期间永久不变,而与名称变化或移动无关。

每个编码的fastq和bam文件都具有与其相关联的来自于五个状态“正在写”、“正在压缩”、“已压缩”、“正在解压”、“未压缩”的状态。参照图6,图6是根据本发明的实施方式的所缓存的fastq和bam文件的五个状态的状态过渡图。

使用fastq和bam表的数据结构来追踪所缓存的fastq和bam文件的状态和属性。由文件的nfs句柄通过散列表(hash)来进行表查找。该表存储如下文件信息:

·原始未压缩大小。

·最后修改的时间和文件属性的最后修改的时间。注意,在由缓存400维持时,不能从所缓存的fastq或bam的属性读取该信息,这是因为每次对文件进行解压时都对所缓存fastq或bam进行重写。

·文件状态。

·压缩大小。

·文件中的当前未压缩和可用于读取的数据范围。

·最后访问时间,用于对诸如写之后的压缩以及缓存管理之类的操作进行定时。

设备100基于文件和目录的nfs文件句柄来管理文件和目录。文件和目录路径名称对于管理目的来说有用。为了支持这些路径名称,设备100维持树形数据结构,该树形数据结构将它管理的nas驻留文件系统的目录和文件结构进行镜像。树中的每个节点都包含如下信息:

·类型,该类型或者是文件或者是目录;

·名称;

·指向树中的父节点的指针;

·对于目录,指向子节点的链接列表的开始的指针;以及

·用于兄弟节点的链接列表的指针。

树形数据结构提供了系统中所有文件(包括非fastq文件)的信息。设备100维护查找表数据结构,该查找表数据结构将nfs文件句柄通过散列表映射到该树形数据结构中的节点。

为了在系统重启期间维护文件系统完整性,将fastq或bam表的非易失性副本存储在nas驻留文件中。在启动时从该文件加载该表,并且将系统操作过程中对其进行的任何改变作为附加至该文件的分录提交到稳定存储器。在下一次系统启动之后,并且一旦将所有分录都结合到存储器驻留的表内,则将更新的表作为文件的新版本重写回到永久存储器。

树形数据结构和相关的查找表用于管理之目的。这样,它们并不保留在永久存储器中。连接线程117在它们处理nfs命令诸如lookup和readdir时负责更新该数据结构。在系统启动之后,内部nfs客户端在压缩文件系统树中来回移动,在该过程中生成nfs命令,该nfs命令通过被相应的连接线程117处理而对树的初始种群进行驱动。

参照附录a,附录a是根据本发明的一个实施方式的用于服务器线程116(行84至118)、连接线程117(行1至83)、主线程118(行119至130)和压缩/解压线程119(行131至150)的线程处理的伪节点列表。

如附录a的行5所示,一旦由服务器线程116创建以服务nfs客户端计算机连接,则连接线程117从如下接收输入:(i)与客户端计算机200和存储系统300的连接相关联的两个tcp套接字;以及(ii)用于从服务器线程116接收消息的消息队列。

如附录a的行6和7所示,通过将从客户端计算机200接收的承载nfs命令的rpc调用的xid字段重写而对该prc字段重新编号。如附录a的行44和45所示,然后在转发回到客户端计算机200的应答中将该字段恢复到其初始值。(不用重新编号,从不同客户端计算机到来的承载相同xid的prc调用可以由nfs服务器解释为重新传输相同的调用,因为它们来自于相同的ip地址)。

从客户端计算机200和存储系统300的连接套接字接收的nfs命令和应答的处理分别依赖于命令类型和编址文件类型,如下所述。

如附录a的行8至11所示,对于mount命令,在被配置到设备100中时,相对于原始文件系统输出使通向待挂载的文件树的根部的路径生效。如果正确的话,则将命令转发至nas300。如附录a的行46至49所示,在记录树的根部的文件句柄之后将应答转发至客户端200。该句柄用来构建树形数据结构。

如附录a的行12至14以及50至52所示,诸如fssata和fsinfo以及与其它相关的应答之类的一般文件系统命令由设备100不进行修改地传递。

对于文件寻址nfs命令,设备100通过文件名称或文件句柄来确定其是否是fastq文件或bam文件。对于通过名称对文件进行寻址的命令,例如create,基于文件名称的后缀“.fq”或“.fastq”或“bam”以及其它后缀来进行分类。对于通过句柄指定文件的命令,通过搜索fastq或bam表来确定在该表中是否列出该文件来识别文件类型。

如附录a的行15至20以及53至55所示,对非fastq或非bam文件进行寻址的命令以及与这些命令相关联的应答由设备100不进行任何修改地传送。在该过程中,由create、rename、remove、lookup、readdir或readdirplus命令指定的文件和目录名称用来树形数据结构和相关的查找表。

如附录a的行21至32和56至69所示,对目录或fastq或bam文件进行寻址的命令由设备100按照如下那样进行处理和可能的修改。

getattr(附录a的行22和57):当对fastq或bam文件进行寻址时,该命令被转发到nas300,该nas300以缓存的fastq或bam文件的属性进行响应。设备100修改应答以显示出:(i)原始未压缩文件大小;和(ii)真实最后修改时间戳,忽略解压,这对所缓存的fastq或bam文件进行重写。

setattr(附录a的行23和58):不允许设置fastq或bam文件的文件大小属性或压缩文件的任何属性。用于其它改变的命令不进行任何修改地转发到nas300,并且如果在应答中报告为接受,则转发到客户端200并用来更新fastq或bam表。

lookup(附录a的行24和59):该命令被转发至nas300,并且应答被转发回到客户端200。应答中的信息用来更新树形数据结构。

access、readlink、symlink(附录a的行25至27和60至62)。命令和应答都不进行任何修改地传递。

mkdir(附录的行28至63):命令和应答都不进行任何修改地传递。如果操作成功,则应答中的信息用来向树形数据结构添加条目。

remove(附录a的行29和64):命令和应答都不进行任何修改地传递。如果操作成功,则向服务器线程发送移除消息,用作清除触发器。

rmdir(附录a的行30和65):命令和应答都不进行任何修改地传递。如果操作成功,则将相关的条目从树形数据结构移除。

rename(附录a的行31和66):命令和应答都不进行任何修改地传递。如果操作成功,则使用该应答中的信息更新树形数据结构。

readdir、readdirplus(附录a的行32、33和67至69):不进行任何修改地传递命令。对应答进行修改:(i)以为压缩文件显示出000的容许访问;和(ii)示出用于fastq或bam文件的原始未压缩大小和真实最后修改时间戳。

如附录a的行34至43和70至76所示,与fastq或bam文件的创建、对fastq或bam文件进行写和读有关的nfs命令涉及如下过程。

create(附录a的行34、70和71):设备100追踪缓存400中可用于未压缩缓存文件的自由空间的量。如果没有可用空间,则以空间不足错误代码拒绝create命令。否则不进行任何修改地传递命令和应答。如果操作成功,则向数据结构中的每个数据结构添加条目,并且将create消息发送到服务器线程116。

write、commit(附录a的行35、36、72和73):只有在文件处于“正在写”状态下时才接受这些命令。在“正在写”状态下,不进行修改地传递命令和应答,并且对fastq或bam表中的最后修改时间戳字段进行更新以在超时时支持开始压缩。

read(附录a的37至43):当文件处于“正在写”、“正在压缩”或“未压缩”状态下时,不进行修改地传递read命令。否则,当文件处于“压缩”或“正在解压”状态下时,连接线程117对由read命令请求的文件数据范围与可用于读取的数据范围(当出现在用于该文件的fastq或bam表条目中时)进行比较。如果所请求的数据可用,则将该命令转发至nas300。否则,将该命令排队,并且将用于该文件的解压消息发送至服务器线程116,从而指定请求从该文件读取的新的数据范围。

连接线程117通过posix消息队列接收来自于服务器线程116的关于文件解压进度的报告。在接收到这种报告时,连接线程117扫描read命令队列并且释放以将对已经可用的数据请求转发到nfs服务器。

如附录a的行74所示,read应答被转发回给客户端200。利用访问时间对fastq或bam表中的最后访问时间戳进行更新以支持缓存管理。

如附录a的行80所示,连接线程117还从服务器线程116接受abort消息,表明正被读取的文件已经被另一个连接线程117删除。当接收到abort消息时,连接线程117以错误应答对所有排队的read命令做出应答。

服务器线程116维护当前处于四个过渡状态中的一个状态下的四个文件列表:“正在写”、“正在压缩”、“正在解压”和未解压。(稳定状态为“压缩”)。在“正在解压”列表中,用于每个文件的条目包括通过其消息队列识别的连接线程117的列表,这些连接线程117等待从文件读取数据。

服务器线程116从如下接收输入:(i)接受来自于连接线程117的消息的消息队列;和(ii)从压缩/解压过程112的线程119接收消息的fifo。

如附录a的行89至100所示,服务器线程116从连接线程117接受如下三种类型的消息:

create(附录a的行91):将fastq或bam表中的文件的状态更改为“正在写”,并且将该文件添加至“正在写”列表。

decompress(附录a的行92至97):如果文件还没有处于“正在解压”状态,即如果由于文件被创建或者被从缓存中移除而由第一read命令触发了消息,则执行缓存管理过程。如果在缓存400中没有空间,则将旧的文件删除。将文件的状态改变成“正在解压”并且将文件添加至“正在解压”列表。然后,针对随后每个对该文件的decompress请求,将decompress请求发送到压缩/解压过程112以针对该文件中的被请求读取的数据范围对其进行更新。

remove(附录a的行98至100):将abort消息发送到压缩/解压线程119以停止文件压缩或解压。abort消息还被发送到当前从文件读取的所有连接线程117。然后将文件条目从数据结构移除。

如附录a的行101至107所示,尽管“正在写”列表不是空的,但是服务器线程116使用空闲定时器周期性地扫描该列表并且确定对于哪个文件(如果有的话)来说自最后write起已经经过合适的时间段,并且压缩因此应该开始。对于每个这种文件,将compress请求发送到压缩/解压过程112,并且将该文件移动到“正在压缩”列表。

服务器线程116通过fifo从压缩/解压过程112接受如下四种类型的消息。

·compressstart报告(附录a的行109):压缩/解压过程112以compressstart报告响应compress请求,该compressstart报告包括执行压缩的压缩/解压线程119的输入fifo的名称。该fifo为与该文件相关的abort消息的地址。

·compressend报告(附录a的行110):将该文件移动到“已压缩”列表。

·decompressstart(附录a的行111):压缩/解压过程112以decompressstart报告响应decompress请求,该decompressstart报告包括执行解压的压缩/解压线程119的输入fifo的名称。该fifo为与该文件相关的另一个decompress请求和abort消息的地址。

·decompress报告(附录a的行112至114):利用可用于读取的新数据对fastq或bam表进行更新,并且通过进度报告消息与从该文件读取的所有连接线程117共享该信息。当decompress报告表示已经到达文件结尾时,将该文件移动到“未解压”列表。

如附录a的行123所示,压缩/解压过程112的主线程118等待消息从服务器116到达其输入fifo。如附录a的行124至126所示,接受两种类型的消息,即:compress请求和decompress请求。compress请求指定了缓存的fastq或bam文件的nfs文件句柄。decompress请求指定了压缩的fastq文件的全路径名称以及该文件中应该解压的数据范围。

如附录a的行125至127所示,当接收compress或decompress请求时,主线程118创建压缩/解压线程119以执行文件的压缩/解压。给新创建的线程119提供待处理的文件的标识、句柄或名称以及在解压的情况下还有该文件中应该进行解压的数据范围。

如附录a的行134至140所示,为了文件压缩而创建的压缩/解压线程119创建压缩文件然后向代理过程111的服务器线程116发送compressstart报告。该消息包括线程的输入fifo的名称。当线程119完成文件的压缩时,它向服务器线程116发送compressend报告。

如附录a的行141至149所示,为了文件解压而创建的压缩/解压线程119向代理过程111的服务器线程116发送decompressstart报告。该消息包括该线程的输入fifo的名称。在解压过程中,该压缩/解压线程119向服务器线程116发送周期性decompress报告(报告已经解压并因此可用于读取的新文件数据)。报告中的标记表示线程119合适到达文件末尾。

在解压过程中,压缩/解压线程119从服务器线程116接受指定更多数据进行解压的decompress请求。

参照图7,图7是根据本发明的一个实施方式的由ngs存储、传输和压缩系统诸如尤其是图4的系统执行的、用于执行filewrite操作的方法1000的简化流程图。方法1000对文件执行顺序写,即将写信息附加至文件末尾。当ngs应用向文件写数据时,设备100首先将数据写到驻留在缓存中的文件的原生ngs版本的一部分。

在操作1005,系统从ngs应用诸如尤其是图4的ngs应用220接收filewrite命令,指定存储系统诸如尤其是图4的存储系统300中的文件的名称和位置,并且指定原生ngs数据以写入到该文件。一般来说,对于文件访问协议,filewrite命令的形式为:

nullfilewrite(namefilename,locationdirectorylocation,ngsdatanativengsdata).

在操作1010,系统将原生ngs数据写到驻留在缓存诸如尤其是图4的缓存400中的原生数据文件或数据对象的一部分。该系统等待,直到之前数据部分被写到该文件起的预定时间,并且在判定1015,该系统判定是否已经经过该预定时间。如果没有,则方法返回到操作1005以接收附加数据进行写操作。否则,如果已经经过预定时间,则在判定1020,系统判定编码数据文件或数据对象的最后部分是否是满的。如果不是,则在判定1025,该系统判定编码文件的最后部分的副本是否驻留在缓存中。如果不是,则在操作1030,该系统对编码数据文件或数据对象的最后部分进行解压。

在操作1035,系统将在操作1005处指定的原生ngs数据添加至如此解压的最后部分。在操作1040,系统将缓存副本的最后部分的开头标记为新数据的开始。在操作1045,系统将编码文件或数据对象的最后部分删除。

在操作1050,系统将在操作1005处接收的原生ngs数据解压。操作1050是可选的,并且只有在原生ngs数据为被压缩的原生格式诸如bam格式而不是用于未压缩的原生格式诸如fastq才执行。对于bam文件,操作1050对原生文件的zip块等级进行解压。在操作1055,系统将解压部分压缩至临时缓冲区。在操作1060,系统将缓冲区内容附加至缓存中的编码数据文件或数据对象。在操作1065,系统将缓存中的编码数据文件或数据对象写入存储系统。在操作1070,系统从存储系统接收确认。在操作1075,该系统将文件写确认发送到ngs应用。

如果在判定1020该系统判定编码数据文件或数据对象的最后部分是满的,则处理直接前进至操作1050。如果在判定1025系统判定编码文件的最后部分的副本驻留在缓存中,则处理直接前进至操作1040。

参照图8,图8是根据本发明的实施方式的由ngs存储、传输和压缩系统诸如尤其是图4的系统执行的用于执行read操作的方法1100的简化流程图。在操作1110,该系统从ngs应用接收read命令,以从存储系统中由名称和位置指定的文件读取数据。一般来说,对于文件访问协议,该fileread命令的形式为:

ngsdatafileread(namefilename,locationdirectorylocation).

在操作1120,该系统确定编码文件包含待读取数据的部分的数量。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于一个以上的编码文件。在判定1130,系统确定是否所有所需的部分都位于缓存诸如图4的缓存系统400中。如果不是,则在操作1140,该系统向存储系统发送一个或多个命令,以读取编码文件的不在该缓存中的那些部分。在操作1150,系统接收编码文件的请求部分。在操作1160,系统对在操作1150接收的部分进行解压,并对解压部分进行缓存。如果原生ngs数据为被压缩的原生格式诸如bam格式,则将解压部分存储在临时缓冲区中而不是将该解压部分缓存。然后,在操作1170,系统使用原生ngs压缩对临时缓冲区的内容进行压缩。操作1170被示出为可选的,因为该操作1170只有在原生ngs格式为压缩格式诸如bam格式时才需要执行,而对于未压缩格式诸如fastq格式不需要执行。对于bam文件,操作1170压缩临时缓冲区的zip块等级。

在该阶段,所有所需部分都位于缓存中。如果系统在判定1130处确定所有所需部分都位于缓存中,则该方法直接前进至操作1180。在操作1180,系统从缓存读取所请求的原生ngs数据。在操作1190,系统将所请求的原生ngs数据发送到ngs应用。

参照图9,图9是根据本发明的一个实施方式的执行createdirectory的方法1200的简化流程图,该方法1200由ngs存储、传输和压缩系统诸如尤其是图4的系统执行。在操作1210,系统从ngs应用诸如尤其是图4的ngs应用220接收createdirectory命令,该命令指定将在存储系统中创建的新目录的名称和位置。一般来说,对于文件访问协议,createdirectory命令的形式为:

nullcreatedirectory(namedirectoryname,locationdirectorylocation).

在操作1220,系统向存储系统发送命令以在指定位置创建具有指定名称的新目录。在操作130,系统从存储系统接收目录创建确认。在操作1240,系统将目录创建确认发送到ngs应用。

参照图10,图10是根据本发明的一个实施方式的用于执行deletedirectory操作的方法1300的简化流程图,该方法1300由ngs存储、传输和压缩系统诸如尤其是图4的系统来执行。在操作1310,系统从ngs应用诸如尤其是图4的ngs应用220接收deletedirectory命令,以从存储系统删除目录,该命令包括目录的指定名称和位置。一般来说,对于文件访问协议,deletedirectory命令的形式为:

nulldeletedirectory(namedirectoryname,locationdirectorylocation).

在操作1320,系统向存储系统发送命令,以从指定位置删除具有指定名称的目录。在操作1330,系统从存储系统接收目录删除确认。在操作1340,系统向ngs应用发送目录删除确认。

参照图11,图11是根据本发明的实施方式的用于执行renamedirectory操作的方法1400的简化流程图,该方法1400由ngs存储、传输和压缩系统诸如尤其是图4的系统来执行。在操作1410,系统从ngs应用诸如尤其是图4的ngs应用220接收renamedirectory命令以将存储系统中的目录重命令,该命令指定目录的旧名称、用于该目录的新名称以及目录的位置。一般来说,对于文件访问协议,renamedirectory命令的形式为:

nullrenamedirectory(nameolddirectoryname,namenewdirectoryname,locationdirectorylocation)

在操作1420,系统向存储系统发送命令以在指定位置将指定目录从旧名称重新命名为新名称。在操作1430,系统从存储系统接收目录重新命名确认。在操作1440,系统向ngs应用发送目录重新命名确认。

参照图12,图12是根据本发明的一个实施方式的用于执行createfile操作的方法1500的简化流程图,该方法1500由ngs存储、传输和压缩系统诸如尤其是图4的系统来执行。在操作1510,系统从ngs应用诸如尤其是图4的ngs应用220接收createfile命令,指定待在存储系统中创建的新的原生ngs文件的名称和位置。一般来说,对于文件访问协议,createfile命令的形式为:

nullcreatefile(namefilename,locationdirectorylocation).

在操作1520,系统向存储系统发送一个或多个命令以在指定位置创建与指定的原生ngs文件对应的一个或多个新的编码文件。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。在操作1530,系统从存储系统接收一个或多个文件创建确认。在操作1540,系统向ngs应用发送文件创建确认。

参照图13,图13是根据本发明的一个实施方式的用于执行deletefile操作的方法1600的简化流程图,该方法1600由ngs存储、传输和压缩系统诸如尤其是图4的系统来执行。在操作1610,系统从ngs应用诸如尤其是图4的ngs应用220接收deletefile命令,指定将从存储系统删除的原生ngs文件的名称和位置。一般来说,对于文件访问协议,deletefile命令的形式为:

nulldeletefile(namefilename,locationdirectorylocation).

在操作1620,系统向存储系统发送一个或多个命令以从指定位置删除与指定原生ngs文件对应的一个或多个编码文件。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。在操作1630,系统从存储系统接收一个或多个文件删除确认。在操作1640,系统向ngs应用发送文件删除确认。

参照图14,图14是根据本发明的一个实施方式的用于执行renamefile操作的方法1700的简化流程图,该方法1700由ngs存储、传输和压缩系统诸如尤其是图4的系统来执行。在操作1710,系统从ngs应用诸如尤其是图4的ngs应用220接收renamefile命令,指定将在存储系统中重新命名的原生ngs文件的旧名称、新名称和位置。一般来说,对于文件访问协议,renamefile命令的形式为:

nullrenamefile(nameoldfilename,namenewfilename,locationdirectorylocation).

在操作1720,系统向存储系统发送一个或多个文件命令,以在指定位置将对应于指定原生ngs文件的一个或多个编码文件重新命名。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。在操作1730,系统从存储系统接收一个或多个文件重新命名确认。在操作1740,系统向ngs应用发送文件重新命名确认。

参照图15,图15是根据本发明的一个实施方式的用于执行readdirectorycontent操作的方法1800的简化流程图,该方法1800由ngs存储、传输和压缩系统执行。在操作1810,系统从ngs应用诸如尤其是图4的ngs应用220接收readdirectorycontent命令,指定存储系统中的目录名称和位置。一般来说,对于文件访问协议,readdirectorycontent命令的形式为:

listreaddirectorycontent(namedirectoryname,locationdirectorylocation).

在操作1820,系统向存储系统发送命令以读取指定位置的指定目录的内容。在操作1830,系统从存储系统接收一个或多个响应,每个响应为编码文件的列表。在操作1840,系统通过将编码文件名称转换为原生ngs文件名称并且对于由ngs数据压缩器诸如图4的压缩器140生成的辅助编码文件通过将辅助编码文件名称移除而对每个响应中的文件列表进行修改。当以多于一种格式提供文件时,系统还复制文件条目以示出用于每个提供的格式的一个条目(由文件扩展名区分)。在操作1850,系统将如此修改的文件列表发送到ngs应用。

参照图16,图16是根据本发明的一个实施方式的用于执行readfileattributes操作的方法1900的简化流程图,该方法1900由ngs存储、传输和压缩系统执行。在操作1910,系统从ngs应用诸如尤其是图4的ngs应用220接收readfileattributes命令,指定存储系统中的原生ngs文件的名称和位置。一般来说,对于文件访问协议,readfileattributes命令的形式为:

fileattributesreadfileattributes(namefilename,locationdirectorylocation).

在操作1920,系统向存储系统发送一个或多个命令,以读取指定目录中与指定原生ngs文件对应的一个或多个编码文件的属性。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。在操作1930,系统从存储系统接收一个或多个响应。在操作1940,系统从在操作1930接收的一个或多个响应提取指定原生ngs文件的属性。在操作1950,系统向ngs应用发送文件属性信息。

参照图17,图17是根据本发明的实施方式的用于执行writefileattributes的方法2000的简化流程图,该方法2000由ngs存储、传输和压缩系统执行。在操作2010,系统从ngs应用诸如尤其是图4的ngs应用220接收writefileattritutes命令,指定存储系统中的原生ngs文件的名称和位置以及一组属性。一般来说,对于文件访问协议,readfileattributes命令的形式为:

nullwritefileattributes(namefilename,locationdirectorylocation,fileattributesattributes).

在操作2020,系统向存储系统发送命令,以在指定位置写入用于与指定原生ngs文件对应的一个或多个编码文件的指定属性。将认识到,在本发明的一些实施方式中,原生ngs文件可以对应于多于一个的编码文件。在操作2030,系统从存储系统接收一个或多个写文件属性确认。在操作2040,系统向ngs应用发送写文件属性确认。

参照图18,图18是根据本发明的一个实施方式的由ngs存储、传输和压缩系统执行的用于执行readfilesysteminfomration操作的方法2100的简化流程图。在操作2110,系统从ngs应用诸如尤其是图4的ngs应用220接收readfilesysteminformation命令,以读取存储系统的文件系统信息。一般来说,对于文件访问协议,readfilesysteminformation命令的形式为:

filesysteminformationreadfilesysteminformation().

在操作2120,系统向存储系统发送一个或多个命令,以读取文件系统信息。在操作2130,系统从存储系统接收一个或多个响应。在操作2140,系统从在操作2130处接收的一个或多个响应来确定所请求的文件系统信息。在操作2150,系统将如此确定的文件系统信息发送至ngs应用。

尽管图7至18涉及使用文件访问协议的操作,但是本领域技术人员将认识到,类似方法适合于使用对象存储协议的操作,这些协议尤其包括putbucket、getbucket、deletebucket、postobject、putobject、getobject、headobject和deleteobject。

ngs数据的压缩

返回来参照图4,在本发明的实施方式中,设备100以fastq格式压缩文件。如被指定为设备100的配置的一部分一样,fastq文件通过文件扩展名(典型地为“.fq”、“.fastq”)来识别。

输入文件可以包含连续完整的fastq记录。fastq记录具有四个字段,每个字段占据一行文本。这些字段以如下顺序出现:(1)标识符;(2)读段;(3)+标识符;(4)质量评分。这些行以换行字符终止,没有回车符。记录类似地由“换行”分开。

标识符以“@”字符开始,随后是高达255个可打印ascii字符。针对由非字母数字字符如“(空格)”或“:(冒号)”分开的令牌构成的名称对压缩进行优化。每个令牌或者是字母数字的或者是数字的。

读段行包含代表碱基的字符“a”、“c”、“g”、“t”和“n”(未识别)的组合。读段中的任何一个字符都可以是小写字母或大写字母。优选地,在解压时,将所有碱基都转换成大写字母。读段行可以为长达4095个碱基。读段行的长度可以变化。

fastq记录的第三行由符号“+”构成,可选地跟随标识符。标识符(如果存在的话)必须与第一行中的标识符相同。

质量评分行在长度上必须与读段行相等。

质量评分行包含ascii字符,该ascii字符具有大于或等于333(“!”字符)和小于或等于74(“j”字符)的数字值。

由参考基因组辅助读段的压缩。设备100可以包括人类基因组(hg19)作为参考。

将每个输入的fastq文件压缩为单个压缩输出文件。

该输出文件为二进制文件。该输出文件以一标题开始,该标题由提供如下信息的一系列类型长度值字段构成。

·软件版本;

·算法版本;

·记录的第三行中重复名称的存在;

·在压缩期间使用参考基因组,在正常操作时总是“是”,

·如果使用参考基因组进行压缩,则参考文件的路径名称;

·如果使用参考基因组进行压缩,则参考文件的校验和;

·输入fastq文件大小;

·输入文件中的读段数量;

·如果使用参考基因组进行压缩,被映射到该参考的读段的数目;

·输入文件校验和;以及

·用于输入文件校验和的种子。

压缩器140从ngs应用220作为输入而接收原生ngs数据文件或数据对象,并且作为输出而生成编码数据文件的一部分以存储在数据存储器320中。解压器150从数据存储器320作为输入而接收编码数据文件的一部分,并且作为输出而生成原生ngs数据文件或数据对象。图14至21示出了在本发明的各种实施方式中使用的若干压缩/解压算法。

参照图19,图19是根据本发明的一个实施方式的用于原生ngs数据的两遍压缩的方法2200的简化流程图。操作2210至2240由数据压缩器诸如图4的压缩器140执行。在操作2210,压缩器作为输入接收原生ngs数据文件或数据对象并且该数据分成多个部分。在本发明的一个实施方式中,原生ngs数据被分成使得每个部分都包括单个字段类型的数据。在操作2220,压缩器在对数据进行第一遍历时计算每个部分的统计。该统计可以特别包括数据值的均值和方差以及数据值之间的相关性。在操作2230,压缩器将该统计记录在编码数据文件或数据对象的一部分中。在操作2240,压缩器在对数据进行第二遍历时使用每个部分的统计自定义该部分的压缩参数,并且将压缩数据写入到编码数据文件或数据对象的一部分内。例如,参照算术编码器,这些参数可以是与编码器一起使用的语境概率。

操作2250和2260由数据解压器诸如图4的解压器150执行。在操作2250,解压器作为输入接收编码数据文件或数据对象,并且从由压缩器在操作2230记录的统计读取编码数据的下一个部分的统计。在操作2260,解压器基于在操作2250读取的统计使用用于该部分的自定义压缩参数对该编码数据解压,并且将解压数据写入到原生ngs数据文件或数据对象。操作2250和2260循环通过编码数据文件或数据对象的所有部分。

参照图20,图20是根据本发明的一个实施方式的用于原生ngs数据的状态压缩(statefulcompression)的方法2300的简化流程图。操作2310至2350由数据压缩器诸如图4的压缩器140执行。在操作2210,压缩器作为输入接收原生ngs数据文件或数据对象,并且将数据分成多个部分。在本发明的一个实施方式中,原生ngs数据被分成使得每个部分包括单个字段类型的数据。在操作2320,压缩器计算每个部分的度量。该度量特别可以是数据值的平均值、方差或最大值。在操作2330,压缩器基于每个部分的度量从多个状态将一状态分配给该部分。例如,根据度量是否大于阈值,该状态可以分别是状态-1或状态-2。在操作2340,压缩器将这些状态记录在编码数据文件或数据对象中。在操作2350,压缩器使用每个部分的状态来自定义该部分的压缩参数,并且将压缩数据写入编码数据文件或数据对象的一部分内。

操作2360和2370由数据解压器诸如图4的解压器150执行。在操作2360,解压器作为输入接收编码数据文件或数据对象,并且从由压缩器在操作2340记录的状态信息读取编码数据的下一个部分的状态。在操作2370,解压器基于在操作2360读取的状态使用用于该部分的自定义压缩参数将编码数据解压,并且将解压数据写入到原生ngs文件或数据对象。操作2360和2370循环通过编码数据文件或数据对象的所有部分。

参照图21,图21是根据本发明的实施方式的用于原生ngs数据的两遍比对压缩的方法2400的简化流程图。操作2405至2435由数据压缩器诸如图4的压缩器140执行。在操作2405,压缩器作为输入接收原生ngs数据文件或数据对象,并且根据字段类型诸如标签、读段和质量评分字段将文件分成多个片段。在操作2410,压缩器使用快速近似算法将每个读段映射到物种的参考基因组。在判定2415,压缩器判定操作2410执行的映射是否成功。如果不是,则在操作2420,压缩器使用缓慢精确算法将读段映射到参考基因组。在判定2425,压缩器判定在操作2420进行的映射是否成功。如果不成功,则在操作2430,在不使用参考基因组的情况下将读段压缩,并且将压缩数据写入到编码数据文件或数据对象。

如果在判定2415或判定2425处,压缩器判定映射成功,则在操作2435处,压缩器通过参考基因组内的位置和读段与参考基因组的差异对该读段进行编码,并且将压缩数据写入到编码数据文件或数据对象。

操作2440至2455由数据解压器诸如图4的解压器150执行。在判定2440,解压器作为输入接收编码数据文件或数据对象,并且针对文件中的每个读段,判定该读段是否是使用用于该物种的参考基因组压缩的。如果是,则在操作2445,解压器读取由压缩器在操作2435记录的位置,并且读取参考基因组的、该读段所映射到的部分。在操作2450,解压器使用在操作2435记录的差异性信息来针对该读段和参考基因组之间的差异对该读段进行校正,并且如此校正的读段输出到原生ngs数据文件或数据对象。

如果在判定2440,解压器判定该读段不是使用参考基因组压缩的,则在操作2455,解压器不使用参考基因组地对读段进行解压,并且将解压数据输出到原生ngs文件或数据对象。

参照图22,图22是根据本发明的一个实施方式的用于对原生ngs数据进行字段外语境压缩的方法2500的简化流程图。操作2510和2520由数据压缩器诸如图4的压缩器140执行。在操作2510,压缩器作为输入接收原生ngs数据文件或数据对象,并且根据字段类型例如标签、读段和质量评分字段将该文件分成多个片段。在操作2520,压缩器考虑到一个片段中的字段的数据值与同一个片段中的其它字段的数据值之间的相关性或其它这种依赖性或者使用该字段中的数据值与其它片段中的字段的数据值之间的相关性对一个片段中的字段进行压缩。每个文件片段可以使用不同压缩算法进行压缩。压缩数据被写入到编码数据文件或数据对象。

操作2530由数据解压器诸如图4的解压器150执行。在操作2530,解压器基于每个片段中的每个字段与同一片段中的其它字段的相关性或者与其它片段中的字段的相关性对每个片段中的每个字段进行解压,并且将解压数据输出到原生ngs文件或数据对象。

参照图23,图23是根据本发明的一个实施方式的用于对原生ngs数据进行基于排序的压缩的方法2600的简化流程图。操作2610至2630由数据压缩器诸如图4的压缩器140执行。在操作2610,压缩器作为输入接收原生ngs数据文件或数据对象,并且将文件分成多个部分,从而使得每个部分含有单个字段类型的数据。

在操作2620,压缩器对这些部分重新排序,从而提高对于所述部分中的一个或多个部分来说能够获得的压缩比。在操作2630,压缩器对每个部分进行压缩,并且将压缩数据写入编码数据文件或数据对象。

操作2640至2670由数据解压器诸如图4的解压器150执行。在操作2640,解压器接收编码数据文件或数据对象并且将各个部分解压。在判定2650,解压器判定原生ngs格式是否需要所排序的区段。例如,fastq文件中的区段可以以它们的标签字段中的蔟坐标的升序排序,而bam文件中的区段可以以染色体号和染色体中的偏移的升序来排序。如果解压器在判定2650判定原生ngs格式需要对这些区段进行排序,则在操作2660,解压器使用这些部分当中的、包含原始文件中被排序的字段类型的一个部分来重新创建所有部分中的字段的原始排序,并且将排序和解压数据输出到原生ngs文件或数据对象。否则,如果解压器在判定2650处判定原生ngs格式不需要对这些区段进行排序,则在操作2670,将解压数据输出到原生ngs文件或数据对象而不对这些区段重新排序。

参照图24,图24是根据本发明的一个实施方式的用于原生ngs数据的并行处理压缩的方法2700的简化流程图。操作2710至2740由数据压缩器诸如图4的压缩器140执行。在操作2710,压缩器作为输入接收原生ngs数据文件或数据对象,并且将文件分成多个部分,从而使得每个部分包括该文件的一个或多个完整区段。在操作2720,压缩器将该部分分成多组部分,从而使得每组部分都包括相同数量(n个)的部分。在操作2730,压缩器发起n个平行执行线程,从而使得第k个线程压缩每组中的部分k。在操作2740,压缩器将这些线程的输出组合成编码数据文件或数据对象,并且记录压缩部分之间的组边界。

操作2750至2770由数据解压器诸如图4的解压器150执行。在操作2750,解压器接收编码数据文件或数据对象,并且使用由压缩器在操作2740记录的组边界将编码数据文件或数据对象的多个部分分成多组部分。在操作2760,解压器发起n个并行执行线程,从而使得这些线程以轮询调度顺序对多个编码部分进行解压,即,在第一轮中,线程1对部分1进行解压,线程2对部分2进行解压,线程n对部分n进行解压;在第二轮中,线程1对部位n+1进行解压,线程2对部分n+2进行解压,线程n对部分2n进行解压,等等。在操作2770,解压器将这些线程的输出组合并且将该输出写入到原生ngs数据文件或数据对象。

参照图25,图25是根据本发明的一个实施方式的用于对原生ngs数据进行基于条码的压缩的方法2800的简化流程图。操作2810至2840由数据压缩器诸如图4的压缩器140执行。在操作2810,压缩器作为输入接收原生ngs数据文件或数据对象,并且搜索每个读段内的条码,从而允许条码内的碱基发生少量变化。在操作2820,压缩器在编码数据文件或数据对象中包含条码字典,即条目字典,每个条目包括用于条码的id和该条码的碱基内容。在操作2830,压缩器通过字典中的id、读段中的偏移以及条码和用于该id的字典条目的碱基内容之间的任何差异来对每个条码进行压缩,并且将压缩数据写入到编码数据文件或数据对象中。在操作2840,压缩器对读段的非条码内容进行压缩,并且将压缩数据写入到编码数据文件或数据对象。

操作2850至2890由数据解压器诸如图4的解压器140执行。在判定2850,解压器接收编码数据文件或数据对象,搜索每个编码读段,并且判定是否发现条码id。如果是,则在操作2860,解压器对压缩字典中的具有该id的条码进行解压,并且采用由压缩器在操作2830记录在文件中的差异。在操作2870,解压器对读段的非条码内容进行解压。在操作2880,解压器使用由压缩器在操作2830记录在文件中的偏移将条码插入到解压读段中的正确位置,并且将解压数据输出到原生ngs数据文件或数据对象。如果在判定2850,解压器判定没有在读段中发现条码id,则在操作2890解压器对读段进行解压而不使用条码,并且将解压数据输出到原生ngs数据文件或数据对象。

参照图26,图26是根据本发明的一个实施方式的用于对原生ngs数据进行重复数据删除(de-duplication)压缩的方法的简化流程图。在ngs应用中,对机器输出文件进行处理以生成比对文件。机器输出文件和比对文件具有两个文件所共有的一些字段。在应用保持机器输出文件和比对文件二者的情况下,图26的算法使用该共有性来降低编码文件大小。图26的算法使用原生比对文件格式中的自由形式可选字段来记录被输入到比对器的机器输出文件的标识符。例如,可以将该标识符写入到sam或bam文件的标题区段中的一行评论字段中。

操作2910至2940由数据压缩器诸如图4的压缩器140执行。在操作2910,压缩器作为输入接收原生比对文件或比对对象,并且读取对应的机器输出文件的标识符。在操作2920,压缩器通过字段类型对比对文件进行分割。在操作2930,压缩器通过搜索它们在机器输出文件中的对应字段来处理在机器输出文件中出现的字段类型。在操作2940,压缩器通过机器输出文件的对应字段的偏移对字段进行编码。

操作2950由数据解压器诸如图4的解压器150执行。在操作2950,解压器接收编码比对文件或比对对象,并且通过使用它们在机器输出文件中的编码偏移来对出现在对应机器输出文件中的字段类型进行解压,并且将解压数据输出到原生ngs比对文件或比对对象。

硬件实施方式

图4的设备可以在用于安装在用户提供的硬件上的软件包诸如centosrpm软件包中实现。另选地,图4的设备可以在硬件上实现。

参照图27,图27是根据本发明的一个实施方式的图4的设备的硬件形式500的图示,示出了前面板接口520和后面板接口540。设备500在图27中被示出为容纳在1u机架安装壳体中。

在本发明的实施方式中,设备500具有下表i中提供的规格。前面板520包括在下表ii中提供的接口。后面板540包括在下表iii中提供的接口。

设备500具有如下四个网络接口:

位于后面板上的两个100mpbs/1gbps/10gbps以太网sfp+接口,名称分别为eth0和eth1;以及

位于后面板上的两个10/100/1000mbps以太网接口,名称分别为eth2和eth3。

在典型的安装中,

接口eth0(10gbps)将设备500连接至nas;

接口eth1(10gbps)将设备500连接至存储客户端;以及

接口eth2(1gbps)用于管理。

参照图28,图28是根据本发明的一个实施方式的用于设备500的示例性ip地址配置。用于与nas通信的接口eth0配置有两个ip地址(别称)即第一地址和第二地址,第一地址被称为“特权地址”,该“特权地址”由设备500使用以访问压缩文件系统和对原始文件系统执行特权操作,第二地址被称为“非特权地址”,该“非特权地址”由设备500使用以作为客户端的代理与nas通信。

例如,限定eth0及其别称eth0:0的两个文件可以如下:

用于eth0的特权地址

device=eth0

hwaddr=ec:f4:bb:de:83:a8

type=ethernet

uuid=5cc8903a-42ab-40a6-b93f-5440e924a300

onboot=yes

nm_controlled=no

bootproto=static

ipaddr=10.10.0.40

prefix=24

defroute=no

用于eth0的非特权地址

device=eth0:0

onboot=yes

nm_controlled=no

bootproto=static

ipaddr=10.10.0.41

prefix=24

defroute=no

设备500可以被配置成通过向/etc/fstab添加如下行来安装nas压缩文件系统:

server:export/mnt/nasnfs

设备500不安装原始文件系统,相反,设备500作为客户端rpc代理来访问该原始文件系统。

设备500的代理可以使用类似于下面提供的示例的配置文件进行配置。以“#”开头的行为注释。其它行由间隔开的名称值对构成。

参照图29,图29是根据本发明的实施方式的由设备500输出的概要信息和文件列表的示例。下面的表iv列出了在图29中所示的信息的类型。

图29中的文件列表包括用于文件状态、文件名称、自最后访问起的时间、原生文件大小、压缩文件尺寸、可获得性、完成/部分/失败的解压、文件句柄的长度和nfs文件句柄。

在以上的说明中,已经参照本发明的具体示例性实施方式描述了本发明。然而,将显然的是,在不脱离本发明的更宽泛精神和范围的情况下可以对这些具体示例性实施方式进行各种修改和改变。因此,应该以例示性而不是限制性含义来看待这些说明和附图。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1