2010-11-24 4 views
12

솔리드 스테이트 드라이브에 저장된 데이터와 함께 r/python을 사용한 경험이있는 사람이 있습니까? 이론적으로는 대부분 읽기 작업을 수행하는 경우 큰 데이터 세트의로드 시간을 크게 향상시켜야합니다. 나는 이것이 진실인지, 그리고 데이터 집약적 인 어플리케이션에서 입출력 률 (IO rate)을 개선하기 위해 SSD에 투자할만한 가치가 있는지 알아보고자합니다.R/python 및 SSD를 사용한 데이터 분석

+0

멋진 반응을 얻은 모든 분들께 감사드립니다. 내가 응용 프로그램의 두 종류가 있다고 생각 : 하나는 내가 R에서 데이터 집합을로드하고 메모리의 데이터에 대한 분석을 수행합니다. 나는 SSD가 그런 종류의 애플 리케이션에별로 중요하지 않다고 생각한다. 그러나 다른 종류의 경우 줄 단위로 데이터를 읽어야합니다. 그리고 이것은 수 백개의 데이터가 될 수 있습니다. 이 앱이 SSD에 도움이된다는 느낌이 들었습니다. – signalseeker

+1

바이너리 형식으로 데이터를 저장하면 작업 속도가 크게 향상된다는 것에 전적으로 동의합니다. 그러나 R과 파이썬 모두에서 작동 할 수있는 공통 바이너리 형식을 찾는 데 문제가 있습니다. HDF5는 옵션이지만 R 라이브러리가 얼마나 좋은지 잘 모르겠습니다. – signalseeker

+1

특히 텍스트 파일의 줄 단위로 읽을 때 어떤 드라이브 유형이 좋든 상관 없습니다. 소프트웨어의 오버 헤드는 디스크의 실제 읽기 시간의 여러 배입니다. 내 타이밍을 확인하면 "타이밍 노이즈"가 내 기존 디스크를 SSD보다 빠르게 만듭니다. 파이썬과 R이 공유 할 수있는 바이너리 포맷에 관해서는 매우 흥미로운 새로운 질문이 될 것입니다. 그 질문에 대한 답을 모르겠지만 여기에있는 사람들 중 일부는 소리를 지을 것이라고 확신합니다. 의견에 남지 말아야합니다. –

답변

18

2 센트 : SSD는 데이터가 아닌 애플리케이션이 저장된 경우에만 지불됩니다. 그리고 심지어는 OS와 같이 디스크에 대한 많은 액세스가 필요한 경우에만 그렇습니다. 사람들은 당신에게 프로파일 링을 가리킬 수 있습니다. 거의 모든 읽기 시간은 디스크로 읽는 것이 아니라 처리로 넘어갑니다.

형식의 저장 위치가 아니라 훨씬 더 많은 정보를 제공합니다. 올바른 응용 프로그램과 올바른 형식을 사용하여 데이터 읽기 속도를 높일 수 있습니다. 텍스트 파일을 뒤적 거리지 않고 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 
+0

감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. – signalseeker

+0

친애하는 downvoters. 나는 downvoting 마음이 아니지만 정확히 동의하지 않는지 알고 싶습니다 ... –

6

http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html 에는 SSD에 관한 좋은 기사가 있습니다. 의견은 많은 통찰력을 제공합니다.

수행중인 분석 유형에 따라 CPU 바운드인지 IO 바운드인지에 따라 다릅니다. 회귀 모델링을 다루는 개인적인 경험은 전직이 더 자주 그런 경우라고 말합니다. SSD는 그다지 쓸모가 없을 것입니다.

요약하면 애플리케이션을 가장 먼저 프로파일 링하는 것이 가장 좋습니다.

+0

+1 링크입니다. –

0

SSD의 읽기 및 쓰기 시간은 표준 7200 RPM 디스크보다 상당히 높습니다 (10k RPM 디스크의 경우 여전히 가치가 있으며, 15k를 넘는 개선 정도는 확실하지 않습니다). 예, 데이터 액세스 시간이 훨씬 빨라졌습니다.

성능 향상은 부인할 수 없습니다. 그렇다면 그것은 경제학의 문제입니다. 2TB 7200 RPM 디스크는 170 달러이고 100GB SSDS는210 달러입니다. 따라서 많은 양의 데이터가있는 경우 문제가 발생할 수 있습니다.

많은 데이터를 읽고 쓰려면 SSD를 얻으십시오. 그러나 응용 프로그램이 CPU를 많이 사용하는 경우 더 나은 프로세서를 사용하면 훨씬 많은 이점을 얻을 수 있습니다.

2

신청서의 프로필을 작성하려면 John 님의 제안을 먼저 받아야합니다. 내 경험에 의하면 느린 부분 인 실제 데이터 읽기가 아니라 데이터를 포함하는 프로그래밍 개체를 만드는 오버 헤드, 문자열에서 캐스팅, 메모리 할당 등이 있습니다.

프로필을 강력하게 제안합니다. 먼저 코드를 작성하고 대체 라이브러리 (예 : numpy)를 사용하여 하드웨어에 투자하기 전에 얻을 수있는 개선 사항을 확인하십시오.

3

미안하지만 대부분의 정답은 @joris가 아닙니다. 이 코드를 실행하면 이진 버전의 작성 시간이 거의 걸리지 않습니다. 하지만 그것은 테스트 세트가 이상하기 때문입니다. 큰 열은 긴 행은 모든 행에 대해 동일합니다. R의 데이터 프레임은 중복 값을 여러 번 저장할 수있는 스마트하지 않습니다 (요인을 통해). 우리가 임의의 데이터

> 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 335K Jun 4 08:46 test.RData 
-rw-rw-r-- 1 carlos carlos 745M Jun 4 08:46 test.txt 

(물론 바이너리의 xD 훨씬 빠릅니다 중)

그래서 마지막에 우리는 335K의 바이너리 파일 대 700메가바이트의 텍스트 파일로 마무리

와 파일

-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 이상으로 이동하기 힘든 랩톱에서 동일한 작업을 수행한다면 차이점을 알 수 있습니다.

실제 바이너리 데이터를 처리해야하고 (동일한 백만 개의 문자열이 큰 데이터가 아닌 것을 반복하면), 데이터의 바이너리 덤프가 1GB를 초과하면 입력 데이터를 읽고 결과를 다시 디스크에 쓰는 데 좋은 디스크 (SSD)가 좋습니다.

+0

이것은 명제를 올바르게 테스트하는 방법에 대한 흥미로운 점입니다. 나는 데이터를 몰랐다. 프레임은 똑똑했다. 좋은! – PatrickT

관련 문제