Was sollte die Puffergröße für den Sortierbefehl sein?

7

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.

Sambit Tripathie
quelle
Möchten Sie nach Feld 2 oder nach allen Feldern ab 2 sortieren?
iruvar
@ 1_CR Ich möchte auf Feld 2
Sambit Tripathy
@polym der verfügbare RAM ist 2 TB und die Dateigröße ist 150G, also entschied man sich, 50% der Gesamtmenge zu verwenden, in der Hoffnung, dass dies gut genug sein sollte. Es hat 32 CPUs bei 2,6 GHz.
Sambit Tripathy
@ 1_CR Ich habe gerade festgestellt, dass mein Befehl den gesamten Inhalt ab Position 2 sortiert und deshalb langsamer ist. Ich habe die Puffergröße auf 200 G reduziert und es versucht.
Sambit Tripathy
Vielleicht möchten Sie auch mit der --parallelOption
herumspielen

Antworten:

4

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/nullzu sehen. Wenn ~ 15 Minuten (oder was auch immer time catangezeigt 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

... diese Option wirkt sich nur auf die anfängliche Puffergröße aus. Der Puffer wächst über SIZE hinaus, wenn "sort" auf Eingabezeilen stößt, die größer als SIZE sind.

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.

James K. Lowden
quelle
1
Das stimmt nicht mit der Puffergröße überein - sie wächst nur für eine lange Reihe, das war's. Nicht für eine große Datei. Eine Erhöhung hilft massiv, indem das Sortieren auf der Festplatte vermieden wird.
Ariel
0

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

Bey0ndB1nary
quelle