MSnbase 2.12.0
在这个描述中,我们将文档各种计时和最近的基准测试MSnbase发展,关注磁盘上数据访问(而不是内存中)。更多关于新实现的细节被记录在各自的类手册页。
基准数据集,我们将使用一个子集的TMT 6-plex实验获得的LTQ Orbitrap Velos,这是分布式的msdata包
图书馆(msdata) f < msdata::蛋白质组学(full.names = TRUE,模式=“TMT_Erwinia_1uLSike_Top10HCD_isol2_45stepped_60min_01.mzML.gz”): (f)
# # [1]“TMT_Erwinia_1uLSike_Top10HCD_isol2_45stepped_60min_01.mzML.gz”
我们需要加载MSnbase包和设置会话范围的冗长的旗帜假
。
库(MSnbase) setMSnbaseVerbose(假)
我们第一次读到的数据使用原来的行为readMSData
通过设置函数模式
参数“inMemory”
生成一个MS2-level原始数据的内存中表示和度量该操作所需的时间。
系统。时间(inmem < - readMSData (f, msLevel = 2,模式=“inMemory”,重心= TRUE))
用户系统运行# # # # 5.868 0.080 6.032
接下来,我们使用readMSData
的函数来生成一个磁盘上表示相同的数据通过设置模式= " onDisk "
。
系统。时间(ondisk < - readMSData (f, msLevel = 2,模式=“ondisk”,重心= TRUE))
用户系统运行# # # # 1.732 0.084 1.813
创建磁盘上的实验是相当大的速度和尺度更大的,多文件数据,对象创建的时间,而且对象的大小(见下一节)。当然我们必须确保这两个数据集是等价的:
所有人。平等(inmem ondisk)
# # [1]
比较这两个对象的大小在内存,我们要使用object_size
函数的pryr包,占(光谱)的数据assayData
环境(而不是object.size
函数的跑龙套
包)。
库(“pryr”)
# #注册S3方法覆盖“pryr”:从# # # #方法打印。字节Rcpp
object_size (inmem)
# # 2.77 MB
object_size (ondisk)
# # 239 kB
不同的是解释这一事实ondisk
,光谱不创建并存储在内存中;他们是在需要时访问磁盘上,如例如策划:
情节(inmem[[200年]],全= TRUE)情节(ondisk[[200年]],全= TRUE)
磁盘上的表示形式的缺点是当光谱数据访问。比较访问时间,我们将使用微基准测试和重复访问10倍比较内存访问所有451和一个光谱(即预装和构造)和磁盘上(即动态访问)。
图书馆(“微基准测试”)mb < -微基准测试(光谱(inmem) inmem[[200年]],光谱(ondisk) ondisk[[200年]],倍= 10)mb
# # # #单元:微秒expr分钟lq意味着平均uq # #光谱(inmem) 80.743 92.969 218.4259 221.9075 - 313.804 # # inmem[[200]] 21.201 24.159 - 50.2922 38.2670 - 75.467 # #光谱(ondisk) 444028.372 446173.953 471368.2301 454291.0625 - 486329.259 # # ondisk[[200年]]218083.572 221288.622 228840.0344 222557.1390 225228.646 342.850 # #马克斯neval cld # # 10 # # 115.452 # # 565668.421 10 c # # 282572.237 10 b
虽然需要秩序或大小更多时间来访问数据动态而不是预生成的频谱,访问所有光谱只是略低于访问所有光谱,因为大多数的时间都花在准备文件访问,这是只做一次。
磁盘访问磁盘的性能取决于阅读吞吐量。对比以上数据导入的文件从一个内部固态驱动器和一个USB3连接硬盘显示只有微小的差异onDisk
模式(1.07vs1.36秒),而没有区别访问个别或全部光谱的观察。因此,对于这个特定的设置,性能几乎是相同的SSD和硬盘驱动器。然而这可能不适用于设置数据导入的并行执行多个文件。
数据访问并不禁止交互使用,如策划,例如,因为它是1/2秒,这是一种操作相对罕见,构造子集和过滤相比,更快的磁盘上的数据:
我< -样品(长度(inmem), 100) system.time (inmem[我])
用户系统运行# # # # 0.112 0.000 0.111
system.time (ondisk[我])
用户系统运行# # # # 0.012 0.000 0.012
光谱数据的操作,如峰值采摘,平滑,清洁,…只是巧妙地缓存和应用访问数据时,最小化文件访问开销。最后,具体操作,如例如定量(参见下一节)是速度的优化。
下面,我们执行TMT 6-plex记者第一100光谱和离子定量验证的结果是相同的(忽略特性名称)。
系统。时间(eim < -量化(inmem[1:10],记者= TMT6方法=“max”))
用户系统运行# # # # 4.264 1.052 1.549
系统。时间(爆炸品处理< -量化(ondisk[1:10],记者= TMT6方法=“max”))
用户系统运行# # # # 0.292 0.032 0.327
所有人。等于(eim爆炸品处理,检查。属性= FALSE)
# # [1]
的MSnExp
和OnDiskMSnExp
文档文件和MSnbase发展装饰图案提供更多信息的实现细节。
磁盘上支持多个水平在一个对象,女士内存中只支持一个单一的水平。同时支持多种水平女士可以被添加到内存后端,内存限制让这个几乎无用的和最有可能永远不会发生。
内存中对象可以save ()
埃德和load ()
艾德,而磁盘上不能。作为一个解决方案,后者可以强迫内存中与实例(,“MSnExp”)
。我们需要mzML
写的支持mzR能够实现连载磁盘上数据。
只要有可能,访问和处理磁盘上数据被延迟懒惰的处理)。这些操作存储在一个处理队列直到光谱有效地实例化。
的磁盘上validObject
方法不验证的有效性光谱(如没有任何检查)。的validateOnDiskMSnExp
功能,另一方面,实例化所有光谱和检查其有效性(除了打电话validObject
)。
本文侧重于速度和改进的新磁盘大小MSnExp
表示。这些改进的扩展将大幅提高大数据。
一般对磁盘上的功能MSnExp
数据类和MSnbase一般来说,看到其他小插曲
装饰图案(包=“MSnbase”)