Ich habe einen Computer mit 2 TB RAM und führe einen Sortierbefehl für eine Datei mit einer Größe von 150 G aus, in der ich die Puffergröße als 1000 G angegeben habe. Nachdem ich meine Suche bei Google durchgeführt habe, habe ich diese Information erhalten Je größer die Puffergröße, desto besser die Leistung. " Dies ist der Befehl, den ich ausgeführt habe
sort -rk2 --buffer-size=1000G master_matrix_unsorted.csv > master_matrix_sorted.csv
Dies nimmt jedoch viel Zeit in Anspruch und ich habe keine Ahnung, wie die Aufgabe voranschreitet.
Haben Sie eine Idee, welche Puffergröße für diesen Vorgang am besten geeignet ist? Ich plane, diese Aufgabe mit einer neuen Puffergröße erneut auszuführen.
--parallel
OptionAntworten:
Sie geben das Betriebssystem und die Sortierimplementierung nicht an. Ich nehme an, Sie meinen GNU-Sortierung. Sie sagen auch nicht, wie lange "viel Zeit" ist oder wie lange Sie damit rechnen. Am wichtigsten ist, dass Sie die E / A-Subsystemfähigkeit nicht erwähnen, die der bestimmende Faktor sein wird.
Ein gewöhnliches SATA-Laufwerk liefert ~ 150 MB / s. Bei dieser Geschwindigkeit dauert das Lesen Ihrer 150-GB-Datei 1000 Sekunden, ungefähr 15 Minuten. Versuche
$ time cat filename >/dev/null
zu sehen. Wenn ~ 15 Minuten (oder was auch immertime cat
angezeigt wird) in Ordnung sind, können Sie sort (1) möglicherweise in etwa der dreifachen Zeit zum Laufen bringen, da auch die Ausgabe geschrieben werden muss.Ihre beste Wahl für die Beschleunigung scheint parallel zu sein, da Ihre Daten in den Speicher passen und Sie über Ersatzprozessoren verfügen. Laut der Infoseite spielt die Puffergröße keine Rolle, weil
Während eine schnelle Suche anzeigt, dass GNU die Zusammenführungssortierung verwendet , die für die Parallelisierung geeignet ist.
Wenn Sie wirklich wissen möchten, wie die GNU-Sortierung die Puffergrößen bestimmt und welchen Algorithmus sie für die parallele Sortierung verwendet, stehen der Quellcode von coreutils und die zugehörige Dokumentation zur Verfügung.
Aber wenn ich du wäre, würde ich mich nicht darum kümmern. Was auch immer Sie tun
master_matrix_unsorted.csv
, sort (1) ist sicherlich nicht der Aufgabe gewachsen.Erstens wird Sie eines Tages eine CSV-Datei stolpern, da die CSV-Syntax weit über das Wissen von sort hinausgeht. Zweitens ist dies der langsamste Weg, da sort (1) gezwungen ist, ganze Zeilen (mit unbestimmter Länge) zu sortieren, nicht nur die zweite Spalte. Drittens, wenn Sie fertig sind, was werden Sie haben? Eine sortierte CSV-Datei. Ist das wirklich besser Warum ist die Bestellung so wichtig?
Das Sortieren klingt wie ein Schritt auf dem Weg zu einem Ziel, das wahrscheinlich eine Art Berechnung der Daten beinhaltet. Für diese Berechnung sind Zahlen im Binärformat erforderlich . In diesem Fall können Sie die CSV-Datei genauso gut zuerst in einem DBMS in ein besser handhabbares, berechenbares Binärformat bringen . Möglicherweise ist das Sortieren für das Endziel unnötig.
quelle
Wie die Puffergröße von # sort berechnet wird, wird hier erwähnt. Dies kann Ihnen eine Idee geben. Ich bin mir nicht sicher, ob es Ihr Problem lösen wird. Aber lesenswert. Dies wird unter Berücksichtigung von MySQL-Datenbank erwähnt. Es kann auch das gleiche Szenario wie bei Ihnen angewendet werden.
SORT Puffergrößenberechnung
quelle