生物信息学。2008年8月15日;24(16): 1757–1764.
用于生产MegaBLAST搜索的数据库索引
美国马里兰州贝塞斯达Rockville Pike 8600号38A栋6S608室,国立卫生研究院国家生物技术信息中心,邮编:20894
*信件应寄给谁。
副主编:John Quackenbush
收到日期:2008年3月6日;2008年6月18日修订;2008年6月18日接受。
- 补充资料
【补充资料】
GUID:44A9AFEF-C3E0-4797-BE7A-4E4978574465
GUID:CAA85232-EB7E-4E66-B280-6DC4EDFF766E
摘要
动机:用于序列比较的BLAST软件包通过将查询序列预处理到查找表中来加快同源性搜索。大量研究表明,对数据库进行预处理反而会带来更好的性能。然而,对数据库进行预处理的序列比较方法的生产使用仅限于BLAT和SSAHA等程序,这些程序旨在在查询和数据库子序列高度相似时查找匹配项。
结果:我们开发了BLAST的MegaBLAST模块的新版本,该模块通过搜索数据库索引来完成寻找匹配的短种子的初始阶段。我们还开发了一个程序makembindex公司它将数据库预处理为数据结构,以便快速搜索种子。我们表明,在大多数实际应用中,新的“索引MegaBLAST”比“无索引”版本更快。我们表明,对于我们测试的200个查询中的大多数,索引的MegaBLAST比miBLAST更快,miBLASD是BLAST核苷酸搜索的另一种实现,带有预处理数据库。为了将索引MegaBLAST部署为NCBI的Web BLAST服务的一部分,修改了数据库的存储和排队机制,以便一些机器现在专用于为特定数据库提供查询服务。这种Web查询的响应时间现在比每台计算机处理多个数据库的查询时更快。
可用性:索引MegaBLAST的代码是序列比对分析NCBI C++工具包中的程序。预处理器程序makembindex公司也在工具箱中。自2007年10月以来,编入索引的MegaBLAST已用于NCBI的Web BLAST服务的生产中,以搜索人类和小鼠基因组的一个版本。的Linux命令行可执行文件序列比对分析和makembindex公司目录中提供了用于执行以下测试的文档和一些查询集:ftp://ftp.ncbi.nlm.nih.gov/pub/agarwala/indexed_megablast网站
联系人: vog.hin.xileh@reffahcs公司
补充信息: 补充数据可在生物信息学在线。
1简介
BLAST(高等学校等。,1997)是一个程序包,用于将查询生物序列与数据库进行匹配,并识别与查询的一部分具有统计意义的局部对齐的数据库序列。使BLAST快速的主要启发式方法之一是对查询进行预处理,以构建一个查找表,该表随后用于查找短的高分未映射对齐,这里称为“种子”。种子可以扩展到更长的未映射路线,然后在BLAST项目的后期阶段扩展到全间隙路线。种子的默认长度是蛋白质的3个氨基酸,用BLASTN模块进行高灵敏度核苷酸搜索的11个核苷酸,用MegaBLAST模块进行低灵敏度核苷酸搜索时的28个核苷酸(Zhang等。,2000). BLAST 2.0版中引入的一项重要创新是要求附近存在两个种子,以减少通过种子阶段的候选匹配数(Altschul等。,1997). 对于蛋白质,最近的研究表明,需要一个长度为6的连续种子和更复杂的预处理可以获得更好的性能(Shiryev等。,2007)。
而不是通过搜索派生自查询,可以通过搜索派生自数据库.大量研究,最近在江审查等。(2007)建议对数据库进行预处理并搜索数据库派生的数据结构可以产生更快的搜索时间。
对数据库进行预处理以进行生物序列比较的两个广泛使用的软件包是SSAHA(Ning)等。,2001)和BLAT(肯特,2002). 然而,这两个包都被定义为只找到几乎相同的匹配[例如,BLAT和BLAST的TBLASTN模块的比较,请参见Gertz等。(2006)]. 我们唯一能找到的软件包是:
产生与BLAST的某些模块类似或相同的结果,
预处理数据库而不是查询,为种子搜索阶段构建数据结构,
为数据结构和数据库使用相当数量的内存(排除后缀树解决方案),以及
具有当前在网络上免费提供的可执行文件或源代码
是miBLAST(Kim等。,2005). miBLAST是为100个基数以下的短查询设计的,我们确认,对于较长的查询,其相对性能确实会下降。下面,我们将介绍一些方法,例如miBLAST,这些方法通过集合术语“数据库索引”从数据库构建搜索结构。
由于数据库索引似乎很有前途,但NCBI BLAST的任何模块都没有使用这种范式,因此我们着手设计一种替代(至少)NCBI PLAST的一个模块,并评估是否可以在生产使用中实现声称的性能优势。NCBI的BLAST Web服务中最常用的搜索数据库是数量,这是一个全面的“非冗余”序列集合。索引数量与其他数据库相比,数据库带来了特定的挑战,因为数量很大,每天都会更新。用于网络BLAST搜索的其他流行数据库是人类和小鼠基因组,在较小程度上是其他脊椎动物基因组。
部分由于2007年NCBI的BLAST网页的重新设计,人类和小鼠的单基因组数据库越来越多地被用户选择,他们每周分别提交约10000和3000个人类和小鼠数据库查询。当前的默认设置是使用MegaBLAST搜索基因组特定核苷酸数据库(Zhang等。,2000)模块,从程序内调用序列比对分析从NCBI C++工具包编译而成。
因此,我们着手开发一种新版本的MegaBLAST,它可以使用从基因组特异性数据库中获得的数据结构来搜索初始种子。我们还需要构建一个程序,在这里称为mk索引名,构建索引结构。“索引的MegaBLAST”的基本目标是,它应该找到与我们开始使用的版本相同的匹配序列和对齐,并且对实践中出现的大多数查询执行得更快。与miBLAST不同,索引MegaBLAST的性能应该随着查询时间的延长或匹配数量的增加而适度下降。
在项目早期,我们意识到,对良好性能的一个基本障碍是查询与基因组中多次出现微小变异的DNA序列很好地对齐。为了解决这个困难,我们开发了软件包WindowMasker(Morgulis等。,2006年a)快速屏蔽频繁重复的序列而不使用重复库。我们意识到,大多数用户很少希望看到BLAST的重复匹配输出,因此我们修改了MegaBLAST,使其能够搜索“soft-masked”数据库。Soft-masked意味着种子不能与遮罩间隔相交,但对齐可以延伸到遮罩间隔并穿过遮罩间隔。MegaBLAST中早就提供了查询的软屏蔽功能。
第2节和三和补充材料描述了我们如何设计和测试索引MegaBLAST,以记录潜在的性能改进。关键测试是NCBI的web BLAST服务的用户将如何响应。索引MegaBLAST于2007年10月部署,用于查询人类和小鼠基因组的BLAST核苷酸搜索变体(单独),并在定期发行说明中宣布。默认情况下,使用WindowMasked版本的基因组,但用户可以关闭屏蔽。用户投诉为零,只有一项一般性调查表明索引MegaBLAST在生产中运行良好。
2方法
在本节和补充材料中,我们描述了用于组织数据库索引的数据结构,以及用于在查询和数据库中查找初始相同子字符串的“种子搜索算法”。我们还描述了测试策略以及索引MegaBLAST如何投入生产使用。如下文所述,种子搜索算法已并入NCBI的MegaBLAST的修改版本中,对后续处理种子的算法代码部分几乎没有更改。
2.1指标结构
MegaBLAST数据库索引包含压缩序列数据以及k个-默斯。除了长度k个,另外两个重要参数是最小种子长度w个(≥k个)和步幅秒用于在数据库中移动。确保每个长度的精确匹配w个在查询和主题之间,我们使用关系秒=w个−k个+1.关于k个-mer结束于秒-第个位置存储在索引中,它满足下面指定的条件,确保我们可以找到所有种子。当前实现默认为w个=16,k个=12和秒=5.
数据库索引由几个称为索引卷的文件组成,每个文件对应于底层数据库中的连续序列范围。索引卷文件包含三个部分:标头、序列数据和偏移数据,如中所示数据库中核苷酸的数量表示为n个。在补充资料中,我们得出了将索引存储为以下形式所需字节数的估计值:
字节。例如,对于大小为1GB的未屏蔽数据库和我们的默认值k个=12,秒=5,则指数的估计大小为~1.175 GB。
2.1.1标题
索引卷的标头部分主要存储由该卷索引的基础数据库中的序列范围。标题部分还存储了一些用于内务管理的辅助值,例如索引格式版本。在代码附带的外部文档中可以找到索引格式当前版本的确切定义。
2.1.2序列数据
序列数据以压缩格式存储,每个序列基使用NCBI2NA编码2位。在这种编码中,基A、C、G和T被相应地编码为整数0、1、2和3。包含不明确字符的位置编码为0。下一小节中描述的种子搜索算法从不涉及序列中的模糊部分。这些部分仅用作占位符。
种子搜索算法与逻辑序列大小大致一致。这使得映射k个-mer定位到相应序列更有效。如下文所述,逻辑序列可以通过拆分长序列或组合几个短序列来形成。逻辑序列和实际数据库序列之间的映射存储在索引卷的序列数据部分中。
为参与给定索引卷的所有逻辑序列分配一个连续整数序列id。在索引的MegaBLAST和NCBI BLAST软件的其他变体中,长数据库序列被分割为重叠序列大块优化处理。从现在开始,由输入序列我们指的是数据库序列或由这种拆分产生的块,这使我们能够避免将算法描述与处理长序列的细节混淆。
输入序列到逻辑序列的映射。让Ş是BLAST代码中定义的块大小(当前默认值为5 Mbase),并让B=⌈log2(Ş)。由于分块,我们可以假设所有输入序列最多都是长度ℓ. 只要连续输入序列的组合长度不超过ℓ. 逻辑序列被分配为连续整数逻辑序列ID从0开始。
索引卷的序列数据部分包含一个表,该表将每个逻辑序列id映射到组成它的输入序列。表中的每个元素包含四个整数:
逻辑序列中第一输入序列的序列id;
逻辑序列中最后一个输入序列的序列id;
此逻辑序列的开始与序列存储开始的偏移量(字节),以及
此逻辑序列结束时与序列存储开始时的偏移量(字节)。
序列存储。序列存储是包含压缩序列数据的索引卷的序列数据部分。逻辑序列按增加逻辑序列id的顺序存储在那里。
逻辑序列数据包含级联编码的组成输入序列。如果需要,使用每基2位的输入序列编码在末尾用额外的0位填充,以确保它们以字节边界结束。索引卷存储所有输入序列的真实长度,因此种子搜索算法不会将填充的0位视为核苷酸编码的一部分。
2.1.3偏移数据
索引卷的偏移数据部分由两部分组成:查找表和偏移列表。查找表包含4个k个条目。这个我-th条目包含指向数据库中名为偏移量列表,其中k个-带有值的mer我发生。
偏移列表位于数据结构中查找表的后面。单个列表由哨兵4字节字编码0终止。我们的偏移量编码方法确保0不是列表项的有效值。的位置k个-mer可以按照其在基础数据库中出现的顺序添加到偏移列表中,但实际上,为了更快地进行搜索,会按照补充材料中的描述排列顺序。
要确定哪些k个-要存储的mer位置种子合格区间为每个输入序列计算。一个种子合格区间是输入序列的子序列,不包含歧义或小写(屏蔽)字母。一个k个-如果以下三个条件成立,则mer存储在索引中:
这个k个-mer完全包含在种子合格区间内;
种子合格间隔至少为w个核苷酸长度和
的最后一个字母的偏移量k个-mer相对于相应逻辑序列的开始是可被步长整除的,秒.
让秒2=2⌈日志2秒⌉; 即2的最小幂大于或等于秒。对于k个-mer实际值o(o)存储在偏移列表中的按以下方式计算:
哪里小时是逻辑序列id,⌈2B/秒⌉是用于编码k个-mer在其逻辑序列中从容不迫秒和第页是的最后一个字母的偏移量k个-mer相对于逻辑序列的开始。o(o)存储为32位宽无符号整数。
特殊偏移量和前缀。对于一些人k个-mer实例中,额外信息与其编码位置一起存储。让d日我(d日第页)是距第一个(最后一个)底面的距离k个-mer到相应有效间隔的左(右)端。我们称之为k个-mer实例特殊的如果有d日我<秒,或d日第页<秒或两者兼而有之。我们定义u个我(u个第页)等于d日我(d日第页)如果d日我<秒(d日第页<秒)否则为0。
种子搜索算法在偏移列表中使用特殊前缀,以确保报告的种子永远不会跨越种子合格间隔的边界。对于特殊情况k个-mer实例,一个额外的32位前缀值o(o)秒=秒2u个我+u个第页存储在其编码位置之前的偏移量列表中o(o)通常情况下o(o)秒<秒22和o(o)≥秒22,因此前缀很容易与实际编码位置区分开来。
偏移条目示例。考虑来自掩蔽的人类基因组的第一个重叠群NT_019273.18的以下子序列,起始于偏移8 500 000(第一个碱基位于偏移0):gagaggACAACACTTAAAGGTTCAACTAGCAATA,(默认)值为k个=12,秒=5,块大小为5 Mb,块重叠为100 bp,输入中偏移量为8500000的基数位于第二个逻辑序列中,其逻辑块中偏移量达3500 100。偏移量3500 100(gagaggACACA)和3500 105(gACACTCTAA)处的12 mers部分被掩盖。因此,它们不属于任何符合种子条件的间隔,也不会添加到索引结构中的查找表偏移量列表中。考虑添加到查找表中的下一个12 mer位于偏移量3 500 110处(CACTTAAAGGTT),并且处于种子合格间隔中。这也是一个特殊的偏移量,因为到其符合种子条件的区间边界的左侧距离只有四个。偏移量3500 115处的12 mer(AAAGGTTCAACT)也处于种子合格区间,但它不是特殊偏移量。
上述子序列中CACTTAAAAGGTT的计算结果导致屏蔽人类基因组索引结构中的条目为:(i)使用四个碱基的位编码的查找表条目索引4702 383,(ii)使用公式2的特殊偏移值32⌈日志25⌉·4+0,以及(iii)使用公式(2⌈日志25 ⌉)2+ 3 500 110/5 + 1 · ((2⌈日志25 ⌉)2+ ⌈ 2⌈日志2(5 000 000)⌉/5 ⌉ + 1). 在查找表条目索引4 702 383的偏移列表中,特殊偏移值32后面是偏移值2 377 873。
2.2测试方法
2.2.1一般设置
数据库索引功能通过可执行文件在NCBI C++工具包中实现序列比对分析和mkindexname(mkindexname)。为了进行测试,我们使用了静态链接版本的序列比对分析和mk索引名根据2007年9月5日的工具包来源构建。这些可执行文件是使用GCC v4.0.1编译器为Linux操作系统内核版本2.6.5下的32位Intel x86体系结构构建的。目录中提供了可执行文件和一些文档:ftp://ftp.ncbi.nlm.nih.gov/pub/agarwala/indexed_megablast网站
所有测试都是在一台运行在3 GHz(两个双核CPU)、8 GB RAM的双Intel Xeon 5160机器上进行的。所有运行都是在单线程模式下进行的。在测量程序的运行时间时,除大规模测试外,执行了三次运行并记录了中值时间。标准UNIX时间实用程序用于测量总运行时间。要测量搜索种子所用的时间,序列比对分析用检测点检测,检测使用Linux的种子搜索过程的时间获取每天的时间系统调用。
以下命令行的实例化(包括一些变量)用于运行序列比对分析用于不同的测试。
-数据库 <数据库>指定使用创建的BLAST数据库的名称格式bname实用程序。格式化数据库名称是NCBI BLAST软件发行版的一部分。
-任务超级爆炸选择MegaBLAST偌块。
-出口6用于选择表格输出格式。
-使用索引允许选择是否使用数据库索引功能。
-索引名称 <索引>是可选的,仅在使用数据库索引功能时才需要。指数在本例中,是通过mk索引名设置补充资料中描述的数据结构的实用程序。例如,如果索引卷已命名数据库00.idx,数据库01.idx,…,然后是的值指数应该是数据库接口.
-查询 <查询>指定包含查询序列的FASTA格式文件的名称。
-过滤db <osr_db>是可选的,用于屏蔽针对有机体特定重复的查询。在这种情况下osr数据库包含重复项的数据库的名称。
跑步,其中-使用索引设置为假被称为“基线”或“无索引”。
数据库。这些测试是针对人类36号染色体和小鼠36号染色体数据库进行的。索引是从未屏蔽的数据库和用WindowMasker(Morgulis)屏蔽的数据库创建的等。,2006年a)包括通过DUST(Morgulis)进行低复杂度过滤等。,2006年b). 每个数据库都被分割成几个卷,因此每个卷索引的大小为~1 GB,或小于最后一个数据库卷的大小。分别对每个卷进行运行,并将所有卷的总和记录为运行时间。
查询。选择查询时重点关注人类和小鼠,因为其中心目标是在生产NCBI web服务中使用索引的MegaBLAST来搜索这两个基因组的核苷酸序列。对于每个生物体,使用四个查询集来测试MegaBLAST的性能,每个查询集包含100个查询。对于生产测试,我们只使用了100个来自人类的查询。我们将这些查询集称为qsmall、qmedium、qlarge、quser和qprod。为了形成qsmall、qmedium和qlarge,从被查询基因组中的细菌人工染色体(BAC)序列中随机选择三个近似大小的样本查询。大小为:小(约500个碱基,范围:501–506)、中(约10个碱,范围:10000–10446)和大(约100个碱,量程:100001–102087);为每个人和鼠标选择了100个不同大小的查询。查询集Qsmall、Qmedium、Qlarge位于ftp://ftp.ncbi.nlm.nih.gov/pub/agarwala/indexed_megablast/queries公司
第四组查询(quser)是通过首先收集一周内提交给NCBI BLAST网络服务的真实用户来创建的,限制是用户单击用于查询人类基因组的链接或用于查询小鼠基因组的链接。对于每个生物体,从这些真实用户查询中随机选择100个查询。在准备quser时,我们没有注意到任何关于用户提交查询的信息,只注意了查询顺序和参数设置。与我们使用的其他查询集不同,Quser不能公开,以保护用户的机密性和NCBI Web BLAST服务的使用。
为了进行生产测试,我们从nt数据库中随机选择了100个人类序列(ftp://ftp.ncbi.nih.gov/blast/db/)作为我们的查询集,我们将此集合称为qprod。这100个查询序列的大小从29个碱基到181166个碱基不等。第50个百分位查询长度为1044个碱基,第75个百分位数查询长度为2120个碱基。这大致反映了提交给NCBI网页的DNA查询的长度分布。
2.2.2索引MegaBLAST与miBLAST的比较
我们比较了miBLAST的性能(Kim等。,2005)和NCBI MegaBLAST,通过对包含人类染色体1至5上的contigs的未屏蔽数据库运行qsmall和qmedia来支持索引数据库。之所以选择这些染色体,是因为数据库的大小为~1 GB。对于所有运行,使用DUST算法(Morgulis)屏蔽查询等。,2006年b),但不为特定于有机体的重复而屏蔽。
由于miBLAST和索引MegaBLAST的预期用途和工程设计不同,与miBLAST的比较并不完美。一些功能相似的用法比较提供了比完全没有比较更有用的信息。在与miBLAST进行比较时,我们使用了qsmall和qmedium,但没有使用qlarge,因为miBLAST只用于短查询。相反,索引的MegaBLAST在数据结构设计中包含一些折衷,这会略微损害其在Qsmall上的性能,因此其在较长查询上的性能与基准MegaBLAS相比具有竞争力或更好。miBLAST使用BLAST的BLASTN模块计算比对,这意味着与MegaBLAST相比,它需要更长的时间并发现更多不完美的局部比对。为了量化这种权衡,我们运行了miBLAST并为MegaBLAST编制了索引,对从人类1-5号染色体提取的10000个50mer查询进行了大规模测试。由于查询来自数据库中的序列,因此可能会期望每个查询至少产生一个完美的全长对齐,但由于使用了DUST过滤,因此对于某些查询,没有报告完美匹配。
2.2.3独立索引和无索引MegaBLAST的比较
在所有情况下,每个命令行调用序列比对分析涉及一个查询。换句话说序列比对分析从未使用过应用程序,所以可以将查询长度用作评估性能的参数。的最新版本序列比对分析还支持拆分长查询。测试中使用的所有查询都足够短,因此不会发生查询拆分。
为了比较查询长度和结果数与无索引情况相比对索引数据库搜索性能的影响,对无屏蔽索引数据库运行查询集qsmall、qmedium和qlarge。这些测试没有应用额外的查询屏蔽。
2.2.4生产环境中有索引和无索引MegaBLAST的比较
NCBI BLAST web服务使用自定义排队系统(ftp://ftp.ncbi.nih.gov/blast/documents/blast-sc2004.pdf)处理搜索请求并向用户显示结果。根据数据库的大小,数据库可能会或可能不会被分割成更小的块,这些块可以在工作节点上并行搜索。类似地,长查询可以拆分,短查询(即使由不同用户提交)也可以合并为单个任务。该系统通过将任务引导到最近执行过类似搜索的工作节点来鼓励缓存重用。虽然传统的MegaBLAST搜索是并行的,并以这种方式运行,但索引的MegaBLAST搜索在专用机器上串行运行。脚本定期在这些专用机器上运行,以确保整个索引驻留在内存中。
我们使用了一个脚本(http://www.ncbi.nlm.nih.gov/blast/docs/web\爆破.pl)针对人类基因组,为qprod中的每个查询提交一个索引搜索和一个非索引搜索,提交间隔为2秒。为了反映NCBI BLAST网页的默认值,针对低复杂性区域和人工重复,屏蔽了无索引查询。索引查询没有被屏蔽,因为索引包含屏蔽信息。记录的时间是每次运行的从开始到结束的墙锁时间,其中每个无索引搜索都分布在10-20个工作节点上,报告的时间不合并单个节点的墙锁次数。
3结果
为了使BLAST数据库索引在生产中可行,第一个要求是索引数据结构使用的内存量应该合理。显示了索引卷相对于实际数据库长度的大小。这些数据用于中所述的定时测试数据库第2.2.3小节和2.2.4以及更短的果蝇属基因组。索引是使用创建的秒=5和k个=12.表的最后一列显示了公式1提供的上限。对于未屏蔽的数据库,这个界限相当紧。在遮罩的情况下,它不太严密,因为它没有考虑到未遮罩基的实际数量。
表1。
源数据库 | 数据库 | 索引大小 | 绑定 |
---|
| 大小(Mbp) | (MB) | (MB) |
---|
果蝇属,未屏蔽 | 116.78 | 229.60 | 250.62 |
果蝇属,已屏蔽 | 116.78 | 204.74 | 250.62 |
人类特征。1-5,无遮罩 | 1025.20 | 1197.79 | 1204.46 |
人类健康。6-13,无遮罩 | 1077.86 | 1254.13 | 1259.75 |
人类健康。14-Y,无遮罩 | 767.77 | 926.56 | 934.16 |
人类健康。1-8,屏蔽 | 1493.03 | 1229.81 | 1695.68 |
人类健康。9-Y,屏蔽 | 1377.79 | 1137.62 | 1574.68 |
鼠标chr。1-7,无遮罩 | 1140.61 | 1297.20 | 1325.64 |
鼠标chr。8-16,无遮罩 | 1074.64 | 1222.98 | 1256.37 |
鼠标chr。17-Y,无遮罩 | 428.82 | 538.65 | 578.26 |
鼠标chr。1-10,屏蔽 | 1526.66 | 1258.19 | 1730.99 |
鼠标chr。11-Y,屏蔽 | 1117.42 | 932.09 | 1301.29 |
第二个要求是,创建索引数据结构所需的预处理时间应该合理。我们测量了创建人类未屏蔽指数、人类屏蔽指数、小鼠未屏蔽指数和小鼠屏蔽指数所需的时间,分别为1319.11s、1000.67s、1176.56s和911.27s。对于每个数据库,前一句中的时间是数据库所有卷的索引卷创建时间之和。
已经表明,用于数据库索引的数据结构可以在合理的内存和时间内创建,我们继续评估搜索时间,特别是查找种子的时间。索引种子搜索的性能优劣取决于种子候选列表的大小(参见补充材料),我们指的是使用索引数据库的BLAST的种子查找阶段。当数据库(或来自相应基因组的查询)被重复和低复杂性区域屏蔽时,种子候选列表可能会很短。然而,对于无掩码数据库和查询,如果查询包含高度重复的区域,与无索引情况相比,索引搜索实际上可能具有更差的性能。
3.1索引MegaBLAST和miBLAST的比较
总结了miBLAST和索引MegaBLAST的性能比较。miBLAST在极短的查询上表现最佳;qsmall查询集中使用的500 bp查询长度位于miBLAST有用的查询长度范围的上限。由于索引MegaBLAST的性能取决于总匹配数,包含单独的行,用于生成少于5000个结果的查询和生成至少5000个结果。在所有情况下,索引MegaBLAST的性能都比miBLAST好至少2.5倍,但qsmall的查询生成的结果超过5000个除外。在后一种情况下,miBLAST的性能优势低于12%。最右边的列显示,在考虑的绝大多数查询中,索引MegaBLAST比miBLAST更快。
表2。
设置 | 结果数量 | 时间(s)
| 更快
|
---|
| | 医疗保险 | MB(MB) | 医疗保险 | MB(MB) | 捆绑 |
---|
Qsmall公司 | <5000 | 170.20 | 23.21 | 0 | 89 | 0 |
| ≥ 5000 | 161.11 | 182.72 | 10 | 1 | 0 |
Q介质 | <5000 | 129.16 | 39.26 | 0 | 17 | 0 |
| ≥ 5000 | 15340.13 | 4237.12 | 6 | 75 | 2 |
在对10000个50个月的查询进行的大规模测试中,miBLAST需要76倍的时间(20小时和25分钟,而不是16分钟)才能找到22倍的局部比对(1.227亿对550万)。然而,索引的MegaBLAST找到9648个查询的完美长度50匹配,而miBLAST则找到9269个查询的最佳匹配。索引的MegaBLAST在查找完美匹配方面的卓越性能出人意料,而Kim中对miBLAST的描述等。(2005)并没有向我们说明为什么miBLAST在~4%的查询中会错过完美匹配,而在这些查询中,它不会被DUST过滤阻止。
miBLAST使用的索引结构与这里描述的索引结构有根本不同k个-mer,miBLAST索引仅存储包含k个-mer,但不是抵消。正如Kim所证明的那样等。(2005),当查询较短时,由此节省的空间可能会非常有利。然而,随着查询长度的增长,包含k个-查询的mer越来越接近1。因此,必须考虑与查询对齐的数据库序列的一部分,Kim等。称之为“过滤比”接近1,miBLAST的相对性能恶化。
3.2独立索引和无索引MegaBLAST的比较
比较了基线搜索和索引搜索的性能。根据查询是产生少量(<5000)结果对齐还是产生大量结果对齐,对查询进行分类。在前一种情况下,索引种子搜索比无索引搜索快5-9倍。然而,在后一种情况下,索引种子搜索速度较慢,因为缓存未命中的次数更多。当种子数量很大时,搜索种子所花费的时间比例很小;几乎所有的时间都花在种子扩展过程中。因此,总运行时间的相对减少很小,介于0%和8%之间。
表3。
在未屏蔽人类基因组数据库的情况下,MegaBLAST基线和索引版本的运行时间(秒)
设置 | <5000个结果
| ≥5000个结果
|
---|
| 计数 | 基线 | 已编制索引 | 计数 | 基线 | 已编制索引 |
---|
Q大型 | 1 | 5.08 | 3.49 | 61 | 44173.96 | 43888.14 |
| | 1.46 | 0.29 | | 961.24 | 1396.93 |
Q介质 | 13 | 82.17 | 71.95 | 87 | 13009.04 | 13325.62 |
| | 24.06 | 6.29 | | 305.10 | 745.59 |
Qsmall公司 | 88 | 118.05 | 56.51 | 12 | 528.85 | 570.84 |
| | 68.19 | 7.24 | | 13.70 | 65.86 |
对于屏蔽数据库,索引的MegaBLAST在所有查询集中始终比基线快,如下所示。在这些运行中,由于基线MegaBLAST无法利用数据库屏蔽信息,因此不会在查询未屏蔽的情况下执行基线搜索。屏蔽查询会在索引运行和基线运行中产生少量种子,使得稍后处理种子和对齐所花费的时间具有可比性。性能优势的实现部分是因为在索引运行中,屏蔽数据库的很大一部分没有扫描潜在种子。在屏蔽的情况下,总运行时间的减少也更加显著,因为扩展过程要处理的种子要少得多。
表4。
MegaBLAST的基线和索引版本在屏蔽基因组和查询屏蔽(用“是”表示)或未屏蔽(由“否”表示)情况下的运行时间(以秒为单位)
| 人类蒙面
| 鼠标蒙面
|
---|
设置 | 基线 | 已编制索引
| 基线 | 已编制索引
|
---|
| 是的 | 是的 | 不 | 是的 | 是的 | 不 |
---|
Q大型 | 1097.11 | 511.76 | 418.31 | 1702.35 | 736.74 | 613.17 |
| 447.42 | 108.32 | 127.60 | 447.50 | 98.71 | 114.07 |
Q介质 | 266.43 | 90.80 | 95.36 | 437.45 | 146.63 | 140.94 |
| 176.21 | 23.97 | 28.64 | 162.15 | 22.82 | 25.63 |
Qsmall公司 | 104.79 | 27.24 | 26.44 | 148.98 | 64.93 | 67.76 |
| 76.83 | 5.27 | 5.33 | 70.10 | 5.32 | 5.11 |
户设定值 | 144.06 | 46.12 | 不适用 | 164.21 | 82.82 | 不适用 |
| 93.49 | 8.27 | 不适用 | 83.18 | 7.01 | 不适用 |
对于屏蔽的数据库,对查询进行索引MegaBLAST搜索,并屏蔽重复,以评估当数据库已经屏蔽时屏蔽查询是否有意义。结果()显示出,尽管在屏蔽查询的情况下,种子搜索阶段要快一些,但总运行时间可能会更差。出现这种异常是因为屏蔽查询涉及对重复数据库调用单独的BLAST搜索,而这样做的开销实际上抵消了由于种子数减少而带来的性能优势。
3.3生产环境中索引和非索引MegaBLAST的比较
显示生产设置中100个索引搜索和100个非索引搜索的运行时间,但用于此测试的计算集群没有用于其他任务。报告的时间是针对每个查询和每个方法进行的两次搜索中的第二次搜索。索引搜索的平均墙锁时间为0.5秒,非索引搜索的为0.8秒。第75个百分位时间提供了更好的用户体验度量;索引搜索为0.38秒,非索引搜索为1.37秒。根据查询大小的对数绘制时间,以表明索引搜索对于较短的查询通常更快,而非索引搜索对于较长的查询更快。
生产设置中100个索引和非索引搜索的墙锁时间是查询长度对数的函数。考虑到如果时间在0.01秒以内,那么索引搜索会快75倍,无索引搜索会更快19倍,并且它们会绑定6个查询。索引搜索在较短的查询上更快,在最长的查询上较慢。
由于无索引搜索使用10-20个节点,而索引搜索使用一个节点,因此即使无索引墙锁时间较短,无索引搜索也可能比索引搜索使用更多的总CPU时间。只要用于索引搜索的专用机器能够跟上传入的对人类和小鼠基因组的MegaBLAST查询,用户就会感觉到基因组特定查询的响应时间要快得多,这是因为更快的运行和对其他数据库的查询没有竞争的综合影响。量化所有类型查询对吞吐量的好处是很困难的,因为专用和共享机器的工作负载随时间变化。
4讨论
我们介绍了MegaBLAST的种子搜索阶段的新实现(Zhang等。,2000)通过搜索索引结构找到种子k个-mers来源于对数据库的预处理。我们发现,这种“索引MegaBLAST”比“基线MegaBLAST”更快,后者在大多数情况下对查询进行预处理,尤其是对屏蔽数据库。当索引的MegaBLAST由于种子太多而速度较慢时,性能下降的程度足够有限,因此代码可以用于生产。索引MegaBLAST满足输出与基线MegaBLAS相同或几乎相同的要求,只要所有选项设置一致。此外,预处理器程序的使用mk索引名正在NCBI进行其他项目的测试,例如将“下一代测序技术”生成的短序列与参考基因组进行比对。
开展这一项目受到了几篇研究论文的积极影响,这些论文表明,对数据库进行预处理以进行初始查找比预处理查询可以获得更快的搜索时间。我们决定将精力投入到相对简单的数据结构设计、MegaBLAST模块的种子搜索阶段以及对屏蔽数据库的支持中,以便在生产BLAST中更快地使用数据库索引。现在,这一总体目标已经实现,有许多可能性可以扩展和改进我们的实施。
首先,我们的实现可以通过改变步幅和k个-摩尔长度。如后文所述,为了获得良好的性能,可能需要长列表的一些替代数据结构。由于字母表的大小增加,将我们的工作扩展到蛋白质搜索将更具挑战性。Williams和Zobel(2002)实现了一个核苷酸和蛋白质搜索的研究原型,称为CAFE,他们在其中将数据库预处理为一个反向索引。他们在CAFE中表现出了令人印象深刻的性能,但为了获得这一性能,他们大大改变了在同源搜索阶段使用的搜索方法和评分,而不仅仅是最初的单词查找。因此,制作一个替换一些BLAST模块的生产版本将比我们进行的种子搜索阶段的替换更困难。
我们的实现有一些可能的算法改进,可以在不进行重大重新设计的情况下进行尝试。我们总结了其中两种可能的变化。而不是使用统一步幅(默认情况下秒=5)选择时k个-在索引中出现的次数较多的情况下,可以通过不均匀的增量来跨越,这样每个潜在的种子(默认长度28)都可以用一个或多个来充分表示k个-mer子串。可以选择每个位置的步幅,以便k个-出现在索引中的mer尽可能少。这将使k个-mer列出的列表更长,但加快了种子搜索阶段。对人类基因组的初步评估表明,使用不均匀步幅可以同时增加k个-mer列表减少9%,加权平均长度缩短25%加权平均数”是指每个k个-mer根据其在基因组中的出现次数进行加权。使用非均匀步长会使预处理花费更长的时间,但我们不认为数据库预处理时间是性能的主要衡量标准,因为预处理是在MegaBLAST外部完成的。另一个可能的改进是k个-mers可以被更复杂的结构所取代,例如散列表或某种树(吉拉迪等。,2002)。
数据库索引研究实施建议的可能改进包括以下方面,这些改进需要进行重大重新设计。使用“问-gram filtering”,它考虑k个-动态规划对齐矩阵区域内的mer匹配可以为候选匹配提供比单个种子(拉斯穆森等。,2006). 数据库序列可以转换为Lee提出的数据特征向量等。(2007). 本着与k个-我们在已经实现的优化(补充材料)下描述的mer重新排序,“pier”的一些子集k个-mer可以存储在Cao中提出的更小、更快速访问的数据结构中等。(2004). 最后,在MICA中实现的序列表示(Stokes和Glick,2006)可以采用节省空间的方式存储较小值的数据库索引k个[斯托克斯和格利克(2006)状态k个=7作为有效上限k个]. 此类索引可用于BLASTN目前提供的更敏感的搜索。
总之,自2007年10月以来,NCBI的网络BLAST服务的一部分一直在使用数据库索引,而不是种子搜索阶段的查询索引。索引MegaBLAST的生产使用和本文中的测试验证了数据库索引所声称的性能改进。我们的实施可能需要进一步改进,可能需要进行重大的重新设计。
致谢
感谢Yuri Merezhuk提供有关使用索引MegaBLAST服务的统计信息,并帮助组装quser测试集。感谢Ivan Ovcharenko测试索引MegaBLAST的命令行版本并建议改进文档。
基金:这项研究得到了美国国立卫生研究院院内研究项目的支持。
利益冲突:未声明。
参考文献
- Altschul SF等。缺口BLAST和PSI-BLAST——新一代蛋白质数据库搜索程序。核酸研究。1997;25:3389–3402. [PMC免费文章][公共医学][谷歌学者]
- Cao X,et al.Piers:DNA序列数据库中相似性搜索的有效模型。ACM SIGMOD记录(生命科学数据工程专刊)。2004年;33:39–44. [谷歌学者]
- Gertz EM等人。基于成分的统计和翻译核苷酸搜索:改进BLAST的TBLASTN模块。BMC生物。2006年;4:41. [PMC免费文章][公共医学][谷歌学者]
- Giladi E,et al.SST:一种算法,用于查找与数据库大小的对数成正比的时间上的近精确序列匹配。生物信息学。2002;18:873–879.[公共医学][谷歌学者]
- 蒋X,等。基于索引的同源搜索算法综述。J.超级计算机。2007;40:185–212. [谷歌学者]
- 肯特·WJ。布拉特-类BLAST对齐工具。基因组研究。2002;12:656–664. [PMC免费文章][公共医学][谷歌学者]
- Kim YJ等人。miBLAST:使用BLAST对一批核苷酸序列查询进行可扩展评估。核酸研究。2005;33:4335–4344. [PMC免费文章][公共医学][谷歌学者]
- Lee AJT等。生物序列数据库中的一种新过滤方法。模式记录。莱特。2007;28:447–458. [谷歌学者]
- Morgulis A等人。一种快速对称的DUST实现,用于屏蔽低复杂性DNA序列。J.公司。生物。2006年a;13:1028–1040.[公共医学][谷歌学者]
- Morgulis A等人。WindowMasker:基于窗口的基因组测序屏蔽器。生物信息学。2006年b;22:134–141.[公共医学][谷歌学者]
- Ning Z等人SSAHA:一种用于大型DNA数据库的快速搜索方法。基因组研究。2001;11:1725–1729. [PMC免费文章][公共医学][谷歌学者]
- Rasmussen KR等人,高效问-用于查找给定长度上所有∈-匹配的gram过滤器。J.公司。生物。2006年;13:296–308.[公共医学][谷歌学者]
- Shiryev SA等人。改进了BLAST搜索,使用更长的单词进行蛋白质播种。生物信息学。2007;29:2949–2951.[公共医学][谷歌学者]
- Stokes WA,Glick BS.MICA:全面搜索DNA数据库的桌面软件。BMC生物信息学。2006年;7:427. [PMC免费文章][公共医学][谷歌学者]
- Williams HE,Zobel J.基因组数据库索引和检索。IEEE传输。知识。数据工程。2002;14:63–78. [谷歌学者]
- Zhang Z等。对齐DNA序列的一致算法。J.公司。生物。2000;7:203–214.[公共医学][谷歌学者]