簡體   English   中英

使用R / python和SSD進行數據分析

[英]Data analysis using R/python and SSDs

有沒有人使用r / python與存儲在固態硬盤中的數據有任何經驗。 如果您主要進行讀取操作,理論上這應該會顯着改善大型數據集的加載時間。 我想知道這是否屬實,是否值得投資SSD以提高數據密集型應用程序的IO速率。

我的2美分: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 

http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html有一篇關於SSD的好文章,評論提供了很多見解。

取決於您正在進行的分析類型,無論是CPU綁定還是IO綁定。 處理回歸建模的個人經驗告訴我,以前更常見的情況是,SSD不會有太多用處。

簡而言之,最好先對您的應用進行分析。

對不起,但我不同意@joris的評分最高的答案。 確實,如果運行該代碼,二進制版本幾乎不需要寫入時間。 但那是因為測試集很奇怪。 每一行的大柱子'longtext'都是一樣的。 R中的數據幀足夠智能,不能多次存儲重復值(通過因子)。

所以最后我們完成了一個700MB的文本文件而不是一個335K的二進制文件(當然二進制文件的速度要快得多)

-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

如您所見,經過的時間不是用戶+系統的總和...因此磁盤是兩種情況下的瓶頸。 是的二進制存儲總是會更快,因為您不必包含分號,引號或類似的人員,而只是將內存對象轉儲到磁盤。

但總有一點是磁盤成為瓶頸。 我的測試是在一個研究服務器上運行的,通過NAS解決方案我們獲得超過600MB / s的磁盤讀/寫時間。 如果你在筆記本電腦上做同樣的事情,那么難以超過50MB / s,你就會注意到它們之間的區別。

所以,如果你實際上必須處理真正的bigData(並且重復一百萬次,相同的千字符串不是大數據),當數據的二進制轉儲超過1 GB時,你會欣賞有一個好的磁盤(SSD讀取輸入數據並將結果寫回磁盤是一個很好的選擇。

我必須提出約翰的第二個建議來描述您的申請。 我的經驗是,實際數據讀取不是緩慢的部分,而是創建編程對象以包含數據,從字符串轉換,內存分配等的開銷。

我強烈建議您首先分析您的代碼,並考慮使用替代庫(如numpy)來查看在投資硬件之前可以獲得哪些改進。

SSD的讀取和寫入時間明顯高於標准的7200 RPM磁盤(使用10k RPM磁盤仍然是值得的,不知道它在15k以上有多大改進)。 所以,是的,你可以在數據訪問上獲得更快的時間。

性能提升是不可否認的。 那么,這是一個經濟學問題。 2TB 7200 RPM磁盤每片170美元,100GB SSDS售價210美元。 因此,如果您有大量數據,則可能會遇到問題。

如果您讀取/寫入大量數據,請獲取SSD。 但是,如果應用程序是CPU密集型的,那么從獲得更好的處理器中獲益更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM