Eine Textdatei mit über 100.000.000 Datensätzen sortieren

8

Ich habe eine 5gig Textdatei, die in alphabetischer Reihenfolge sortiert werden muss Was ist der beste Algorithmus?

Einschränkungen:

Geschwindigkeit - So schnell wie möglich

Memory - Ein PC mit 1 Gig Ram läuft Windows XP

    
Charles Faiga 20.12.2009, 07:43
quelle

6 Antworten

11

Ich sortiere routinemäßig Textdateien & gt; 2GB mit dem Befehl sort linux. Normalerweise dauert es 15 - 30 Sekunden, abhängig von der Serverlast.

Tu es einfach, es wird nicht so lange dauern, wie du denkst.

Aktualisieren Da Sie Windows XP verwenden, können Sie den Befehl sort in UnxUtils abrufen. Ich benutze das wahrscheinlich mehr als die Linux-Version, und es ist genauso schnell.

Der Engpass für riesige Dateien ist wirklich Festplattengeschwindigkeit .. mein Server oben hat einen schnellen SATA-Überfall. Wenn es sich bei Ihrem Computer um einen Desktop (oder Laptop) handelt, fügen Ihre 7200 RPM (oder 5400) RPM IDE-Laufwerke dem Job ein paar Minuten hinzu.

    
Seth 20.12.2009, 07:46
quelle
5

Bei Textdateien funktioniert sort , zumindest die GNU Coreutils-Version unter Linux und anderen, erstaunlich schnell.

Sehen Sie sich die Optionen --buffer-size und verwandte Optionen an und legen Sie --temporary-directory fest, wenn das Verzeichnis /tmp zu klein ist.

Alternativ können Sie, wenn Sie sich wirklich sorgen, wie lange es dauern könnte, die Datei in kleinere Stücke aufteilen, dann einzeln sortieren und dann zusammenfügen (mit sort --merge ). Das Sortieren jedes Chunks kann auf verschiedenen Systemen parallel erfolgen.

    
ZoogieZork 20.12.2009 07:57
quelle
1

Ich würde sagen, nehmen Sie eine kleinere Teilmenge der Daten und versuchen Sie ein paar, um zu sehen, welche am besten funktionieren, dann gehen Sie damit. Dieser Artikel kann Ihnen den Einstieg erleichtern .

    
John Biesnecker 20.12.2009 07:45
quelle
1

Was sind die Parameter der Sortierung? Haben Sie Zeitbeschränkungen oder Platzbeschränkungen? Wie nahe ist die Datei bereits bestellt? Müssen Sie es in einem Durchgang tun?

    
GrayWizardx 20.12.2009 07:45
quelle
0

Merge Sort ist die beste Wahl.

    
No Refunds No Returns 20.12.2009 07:45
quelle
0

Wie wäre es, wenn Sie die Daten mit dem Befehl Massen einfügen in SQL Server importieren?

Linktext

Dadurch werden die Daten relativ schnell in den SQL Server geladen und Sie können dann alle Arten von effizientem SQL-Sortieren basierend auf den importierten Daten durchführen.

Sie können dies auch als eine automatisierte Aufgabe mit SQL Server SSIS einrichten.

    
Brian Scott 20.12.2009 21:14
quelle

Tags und Links