有没有人有使用r/python处理存储在固态硬盘中的数据的经验?如果您主要进行读取,理论上这应该会显著改善大型数据集的加载时间。我想知道这是否属实,以及是否值得投资固态硬盘来提高数据密集型应用程序的IO速率。
发布于 2010-11-24 18:13:28
我的2分: SSD只有在你的应用程序存储在SSD上,而不是你的数据存储在SSD上的情况下才能获得回报。即使这样,也只有在需要大量访问磁盘的情况下才会出现这种情况,比如操作系统。人们向你指出分析是正确的。我可以不这样做就告诉你,几乎所有的读取时间都花在处理上,而不是在磁盘上读取。
考虑数据的格式而不是数据的存储位置会带来更大的回报。通过使用正确的应用程序和正确的格式,可以加快读取数据的速度。比如使用R的内部格式,而不是笨手笨脚地处理文本文件。让它成为一个感叹号:永远不要继续笨手笨脚地处理文本文件。如果您需要的是速度,请使用二进制。
由于开销的原因,如果您使用SSD或普通磁盘来读取数据,通常不会有什么不同。我两者都有,并且使用普通磁盘存储我所有的数据。我有时会处理大数据集,但从来没有遇到过问题。当然,如果我的工作非常繁重,我只需要在我们的服务器上工作。
因此,当我们谈论大量数据时,这可能会有所不同,但即使这样,我也非常怀疑磁盘访问是否是限制因素。除非你不断地读写磁盘,但我会说,你应该开始重新思考你到底在做什么。与其把钱花在SDD驱动器上,额外的内存可能是更好的选择。或者干脆说服老板给你弄个像样的计算服务器。
这是一个计时实验,使用伪造的数据帧,并在SSD磁盘和普通磁盘上以文本格式与二进制格式进行读写。
> tt <- 100
> longtext <- paste(rep("dqsdgfmqslkfdjiehsmlsdfkjqsefr",1000),collapse="")
> test <- data.frame(
+ X1=rep(letters,tt),
+ X2=rep(1:26,tt),
+ X3=rep(longtext,26*tt)
+ )
> SSD <- "C:/Temp" # My ssd disk with my 2 operating systems on it.
> normal <- "F:/Temp" # My normal disk, I use for data
> # Write text
> system.time(write.table(test,file=paste(SSD,"test.txt",sep="/")))
user system elapsed
5.66 0.50 6.24
> system.time(write.table(test,file=paste(normal,"test.txt",sep="/")))
user system elapsed
5.68 0.39 6.08
> # Write binary
> system.time(save(test,file=paste(SSD,"test.RData",sep="/")))
user system elapsed
0 0 0
> system.time(save(test,file=paste(normal,"test.RData",sep="/")))
user system elapsed
0 0 0
> # Read text
> system.time(read.table(file=paste(SSD,"test.txt",sep="/"),header=T))
user system elapsed
8.57 0.05 8.61
> system.time(read.table(file=paste(normal,"test.txt",sep="/"),header=T))
user system elapsed
8.53 0.09 8.63
> # Read binary
> system.time(load(file=paste(SSD,"test.RData",sep="/")))
user system elapsed
0 0 0
> system.time(load(file=paste(normal,"test.RData",sep="/")))
user system elapsed
0 0 0
发布于 2010-11-24 10:37:24
http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html有一篇关于固态硬盘的好文章,评论提供了很多见解。
取决于您正在进行的分析类型,无论是CPU绑定还是IO绑定。处理回归建模的个人经验告诉我,前者通常是这样的,那么SSD就不会有太大的用处。
简而言之,最好先分析您的应用程序。
发布于 2012-06-05 00:11:12
抱歉,我不得不不同意@joris的大多数评分答案。如果您运行该代码,那么二进制版本几乎不需要任何时间来编写,这是事实。但那是因为测试集很奇怪。大列'longtext‘对于每一行都是相同的。R中的数据帧足够智能,可以多次存储重复的值(通过因子)。
最后,我们得到一个700MB的文本文件,而不是一个335K的二进制文件(当然,二进制文件的xD速度要快得多)
-rw-r--r-- 1 carlos carlos 335K Jun 4 08:46 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun 4 08:46 test.txt
然而,如果我们尝试随机数据
> longtext<-paste(sample(c(0:9, letters, LETTERS),1000*nchar('dqsdgfmqslkfdjiehsmlsdfkjqsefr'), replace=TRUE),collapse="")
> test$X3<-rep(longtext,26*tt)
>
> system.time(write.table(test,file='test.txt'))
user system elapsed
2.119 0.476 4.723
> system.time(save(test,file='test.RData'))
user system elapsed
0.229 0.879 3.069
文件并没有太大的不同
-rw-r--r-- 1 carlos carlos 745M Jun 4 08:52 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun 4 08:52 test.txt
正如您所看到的,经过的时间不是user+system...so的总和,在这两种情况下,磁盘都是瓶颈。是的,二进制存储总是更快,因为你不需要包括分号,引号或人员,只需将内存对象转储到磁盘即可。
但总有一天磁盘会成为瓶颈。我的测试是在一个研究服务器上运行的,通过NAS解决方案,我们可以获得超过600MB/s的磁盘读/写时间。如果你在笔记本电脑上执行同样的操作,很难超过50MB/s,你就会注意到区别。
因此,如果您实际上必须处理真正的bigData (并且重复一百万次相同的千字符串并不是大数据),当数据的二进制转储超过1 GB时,您将很高兴有一个好的磁盘(固态硬盘是一个很好的选择)来读取输入数据并将结果写回磁盘。
https://stackoverflow.com/questions/4262984
复制相似问题