有沒有人有任何使用r/python存儲在固態驅動器中的數據的經驗。如果您正在進行大部分讀取,理論上這應該會顯着改善大型數據集的加載時間。我想知道這是否屬實,以及是否值得投資固態硬盤來提高數據密集型應用中的IO速率。使用R/python和SSD進行數據分析
回答
我的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限制。 個人經驗處理迴歸建模告訴我前者更常見的情況下,固態硬盤將不會很有用。
總之,最好先分析您的應用程序。
+1。 – 2010-11-24 12:43:00
SSD的讀取和寫入次數明顯高於標準的7200 RPM磁盤(它仍然值得使用10K RPM磁盤,不知道它在15K以上有多大改進)。所以,是的,你會在數據訪問上獲得更快的時間。
性能改進是不可否認的。那麼,這是一個經濟問題。 2TB 7200 RPM磁盤每塊170美元,100GB SSDS成本210美元。所以如果你有很多數據,你可能會遇到問題。
如果您讀取/寫入大量數據,請獲取SSD。但是,如果應用程序是CPU密集型的,那麼獲得更好的處理器會讓您受益匪淺。
我不得不第二次約翰的建議來分析你的應用程序。我的經驗是,它不是實際的數據讀取是緩慢的部分,它是創建編程對象來包含數據,從字符串投射,內存分配等開銷。
我強烈建議您簡介首先考慮您的代碼,並考慮使用其他庫(如numpy)來查看在投資硬件之前可以獲得哪些改進。
對不起,但我不同意@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
正如你看到的,經歷的時間不是用戶+系統的總和...所以磁盤是兩種情況下的瓶頸。是的,二進制存儲將總是更快,因爲您不必包含分號,引號或類似的工作人員,而只是將內存對象轉儲到磁盤。
但是總有一點,磁盤變成了瓶頸。我的測試運行在研究服務器上,通過NAS解決方案,我們的磁盤讀寫時間超過600MB/s。如果你在筆記本電腦中也是如此,那麼很難超過50MB/s,你會注意到它的差異。因此,如果你實際上必須處理真正的bigData(並且重複一百萬次,同一千字符串不是大數據),那麼當數據的二進制轉儲超過1 GB時,你會明白有一個好的磁盤(SSD是一個不錯的選擇)用於讀取輸入數據並將結果寫回磁盤。
- 1. 使用webGL庫進行數據可視化和數據分析?
- 2. 使用Python進行數據分析
- 3. rPython和進口__future__
- 4. 使用LLVM進行數據和環路依賴性分析
- 5. 使用非規格化數據庫表進行分析數據
- 6. 使用xcodebuild進行構建和分析
- 7. 使用g ++進行分析
- 8. 使用HBase進行分析
- 9. 使用Java Restlet進行參數分析
- 10. 使用MATLAB進行數值分析
- 11. 使用PostgreSQL函數進行數據分析
- 12. 使用rPython進口numply與Python 3.5
- 13. 使用Rails應用程序進行數據分析
- 14. 使用libpca進行主成分分析
- 15. 使用Killerbee進行Zigbee數據包分析
- 16. 過濾JSON數據以便使用Hive進行分析
- 17. 使用熊貓進行數據框架統計分析
- 18. 使用分析立方體數據進行下拉
- 19. 使用Azure流分析進行簡單的數據傳遞
- 20. 使用C#進行分析服務數據庫凍結
- 21. 使用Dataframe代替spark sql進行數據分析
- 22. 關於使用Microsoft Excel進行數據分析的問題
- 23. 使用Star架構數據倉庫進行報告與分析
- 24. 使用Python進行數據分析熊貓
- 25. 如何使用Hbase進行用戶分析和行爲定位?
- 26. 用python對大熊貓進行分組數據分析
- 27. 如何在啓用分配數據收集時使用dotMemory進行分析CLT
- 28. 使用Hadoop進行未來大數據分析的數據格式
- 29. 使用PHP進行數據分區
- 30. 使用mahout對數據進行分類
感謝大家一些優秀的迴應!我想我有兩種類型的應用程序:一種是在R中加載數據集,然後對內存中的數據進行分析。我猜SSD對於這類應用程序無關緊要。 但是,對於其他類型,我必須逐行讀取數據。這可能是幾百MB的數據。我有一種感覺,這些應用程序可以從SSD中受益。 – signalseeker 2010-11-24 14:47:58
我完全同意以二進制格式存儲數據會顯着加快速度。不過,我無法找到可以同時用於R和python的通用二進制格式。 HDF5是一個選項,但我不確定R libs有多好。 – signalseeker 2010-11-24 14:52:10
特別是當逐行讀取文本文件時,它並不重要,你有什麼類型的驅動器。軟件的開銷是磁盤實際讀取時間的很多倍。如果你檢查我的時間,你會發現「定時噪聲」甚至使我的舊磁盤比SSD更快!關於Python和R可以共享的二進制格式,這將是一個非常有趣的新問題。我不知道那個答案,但我相信這裏有些人會加入進來。不應該留在評論中。 – 2010-11-24 15:23:21