Hat jemand Erfahrung mit r/python mit Daten in Solid State Drives gespeichert. Wenn Sie hauptsächlich Lesevorgänge durchführen, sollte dies in der Theorie die Ladezeiten großer Datensätze erheblich verbessern. Ich möchte herausfinden, ob das stimmt und ob es sich lohnt, in SSDs zu investieren, um die IO-Raten in datenintensiven Anwendungen zu verbessern.Datenanalyse mit R/python und SSDs
Antwort
Meine 2 Cent: SSD zahlt sich nur aus, wenn Ihre Anwendungen darauf gespeichert sind, nicht Ihre Daten. Und selbst dann nur, wenn viel Zugriff auf die Festplatte erforderlich ist, wie für ein Betriebssystem. Die Leute haben Recht, Sie auf Profiling zu verweisen. Ich kann Ihnen sagen, ohne es zu tun, dass fast die gesamte Lesezeit zur Verarbeitung geht, nicht zum Lesen auf der Platte.
Es lohnt sich viel mehr zu denken über das Format Ihrer Daten statt wo es gespeichert ist. Eine Beschleunigung beim Lesen Ihrer Daten erhalten Sie, indem Sie die richtigen Anwendungen und das richtige Format verwenden. Zum Beispiel das interne Format von R, anstatt mit Textdateien herumzufummeln. Machen Sie das zu einem Ausrufezeichen: Fangen Sie nie wieder mit Textdateien herum. Gehen Sie binär, wenn Geschwindigkeit das ist, was Sie brauchen.
Aufgrund des Overheads macht es im Allgemeinen keinen Unterschied, ob Sie eine SSD oder eine normale Festplatte zum Lesen Ihrer Daten haben. Ich habe beide und benutze die normale Festplatte für alle meine Daten. Manchmal jongliere ich mit großen Datenmengen herum und habe nie ein Problem damit erlebt. Natürlich, wenn ich wirklich schwer arbeiten muss, arbeite ich nur auf unseren Servern.
So kann es einen Unterschied machen, wenn wir Gigs und Gigs von Daten sprechen, aber selbst dann bezweifle ich sehr, dass der Festplattenzugriff der limitierende Faktor ist. Es sei denn, du liest und schreibst ständig auf die Diskette, aber dann würde ich sagen, dass du wieder darüber nachdenken solltest, was genau du machst. Anstatt dieses Geld für SDD-Laufwerke auszugeben, könnte zusätzlicher Speicher die bessere Option sein. Oder überzeuge den Chef einfach, dir einen anständigen Rechenserver zu besorgen.
Ein Timing-Experiment mit einem falschen Datenrahmen und Lesen und Schreiben im Textformat im Vergleich zum Binärformat auf einer SSD-Festplatte im Vergleich zu einer normalen Festplatte.
> 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
Danke. Genau das habe ich gesucht. – signalseeker
Liebe Downvoters. Nicht, dass ich Bedenken hätte, aber ich würde gerne wissen, was genau Sie nicht zustimmen ... –
http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html hat einen guten Artikel über SSDs, Kommentare bieten viele Einsichten.
Hängt von der Art der Analyse ab, die Sie gerade ausführen, unabhängig davon, ob es sich um eine CPU-gebundene oder IO-gebundene Verbindung handelt. Meine persönliche Erfahrung im Umgang mit Regressionsmodellen zeigt mir, dass früher eher SSDs nutzlos sind.
Kurz gesagt, am besten, um Ihre Anwendung zuerst zu profilieren.
+1 für den Link. –
Die Lese- und Schreibzeiten für SSDs sind deutlich höher als bei Standard-7200-RPM-Festplatten (es lohnt sich immer noch mit einer 10k-RPM-Festplatte, nicht sicher, wie viel eine Verbesserung über 15k ist). Also, ja, Sie würden viel schneller Datenzugriff bekommen.
Die Leistungsverbesserung ist nicht zu leugnen. Dann ist es eine Frage der Ökonomie. 2TB 7200 RPM Festplatten sind $ 170 pro Stück und 100 GB SSDS kosten $ 210. Wenn Sie also viele Daten haben, können Sie auf ein Problem stoßen.
Wenn Sie viele Daten lesen/schreiben, erhalten Sie eine SSD. Wenn die Anwendung CPU-intensiv ist, profitieren Sie jedoch viel mehr von einem besseren Prozessor.
Ich habe Johns Vorschlag, um Ihre Anwendung zu profilieren. Meine Erfahrung ist, dass es nicht die tatsächlichen Daten liest, die der langsame Teil sind, es ist der Overhead des Erstellens der Programmierobjekte, um die Daten, Casting von Zeichenfolgen, Speicherzuweisung usw.
zu enthalten Ich würde Ihnen stark Profil vorschlagen Bevor Sie in Hardware investieren, sollten Sie in Erwägung ziehen, alternative Bibliotheken (z. B. numpy) zu verwenden, um zu sehen, welche Verbesserungen Sie erzielen können.
Sorry, aber ich habe von @joris mit dem meisten bewerteten Antwort zu widersprechen. Es ist wahr, dass, wenn Sie diesen Code ausführen, die binäre Version fast null Zeit braucht, um geschrieben zu werden. Aber das ist, weil das Testset seltsam ist. Die große Kolumne 'Longtext' ist für jede Zeile gleich. Datenrahmen in R sind intelligent genug, um doppelte Werte mehr als einmal zu speichern (über Faktoren).
So am Ende beenden wir mit einer Textdatei von 700 MB im Vergleich zu einer Binärdatei von 335K (Natürlich binären xD ist viel schneller)
-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
Wenn wir jedoch mit zufälligen Daten versuchen
> 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
und Dateien sind nicht anders
-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
Wie Sie sehen, ist die verstrichene Zeit nicht die Summe der Benutzer + System ... so ist die Platte in beiden Fällen der Flaschenhals. Ja, das binäre Speichern wird immer schneller sein, da Sie kein Semikolon, Anführungszeichen oder Personal hinzufügen müssen, sondern nur das Speicherobjekt auf die Festplatte entladen.
ABER es gibt immer einen Punkt, wo Festplatte Engpass wird. Mein Test wurde in einem Forschungsserver ausgeführt, wo wir über NAS-Lösung Lese-/Schreibzeiten von mehr als 600 MB/s haben. Wenn Sie dasselbe in Ihrem Laptop tun, wo es schwierig ist, über 50MB/s zu gehen, werden Sie den Unterschied bemerken.
Also, wenn Sie wirklich mit BigData umgehen müssen (und eine Million Mal die gleiche tausend Zeichenfolge ist nicht große Daten wiederholen), wenn die binäre Dump der Daten über 1 GB ist, werden Sie schätzen, ein gute Festplatte (SSD ist eine gute Wahl) zum Lesen von Eingabedaten und Schreiben von Ergebnissen zurück auf die Festplatte.
Dies ist ein interessanter Punkt, um den Vorschlag richtig zu testen. Ich wusste nicht, data.frames waren schlau. Nett! – PatrickT
Vielen Dank für einige exzellente Antworten! Ich denke, ich habe 2 Arten von Anwendungen: Eine, wo ich ein Dataset in R laden und dann Analyse auf die Daten im Speicher. Ich denke, SSDs werden für solche Apps keine Rolle spielen. Allerdings muss ich für die andere Art Daten Zeile für Zeile lesen. Und das können mehrere 100 MB Daten sein. Ich habe das Gefühl, dass diese Apps für SSDs profitieren können. – signalseeker
Ich stimme völlig zu, dass das Speichern von Daten in einem binären Format die Dinge erheblich beschleunigen wird. Jedoch habe ich Probleme, ein allgemeines binäres Format zu finden, das mit R und Python arbeiten kann. HDF5 ist eine Option, aber ich bin mir nicht sicher, wie gut die R-Bibliotheken sind. – signalseeker
vor allem beim Lesen Zeile für Zeile von Textdateien ist es egal, welche Art von Laufwerk Sie haben. Der Overhead der Software ist ein Vielfaches der tatsächlichen Lesezeit auf Ihrer Festplatte. Wenn Sie meine Timings überprüfen, sehen Sie, dass "Timing Noise" sogar meine alte Festplatte schneller macht als die SSD! In Bezug auf das binäre Format, das von Python und R geteilt werden kann, wäre das eine sehr interessante neue Frage. Ich kenne die Antwort nicht, aber ich bin mir sicher, dass einige Leute hier reinhören werden. Es sollte nicht in den Kommentaren bleiben. –