2009-12-20 7 views
8

Ich habe eine 5gig Textdatei, die in alphabetischer Reihenfolge sortiert werden muss Was ist der beste Algorithmus zu verwenden?Sortieren einer Textdatei mit über 100.000.000 Datensätze

Einschränkungen:

Speed ​​- So schnell wie möglich

Speicher - Ein PC mit 1 Gig Ram mit Windows XP

+2

Ihre Frage ist wahrscheinlich ein Duplikat. Sieh dir den externen Mergesort an: http://en.wikipedia.org/wiki/External_sorting –

Antwort

11

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

Tun Sie es einfach, es dauert nicht so lange, wie Sie denken.

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

Der Engpass für große Dateien 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.

+0

Aber sei sehr vorsichtig damit du die Daten nicht als UTF-8 behandeln kannst, wenn du diese Fähigkeit nicht brauchst: in modernen Linux (und Cygwin) Versionen von Sortieren UTF-8-Vergleiche verlangsamen die Leistung um etwa 100 Mal. –

+0

super danke! Hat mir gerade eine Menge Arbeit gerettet! – AaronP

0

Merge Sort ist die beste Wahl.

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. This article might help you get started.

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?

5

Für Textdateien funktioniert sort, zumindest die GNU Coreutils-Version in Linux und anderen, überraschend schnell.

Werfen Sie einen Blick auf die --buffer-size und zugehörige Optionen, und setzen Sie --temporary-directory, wenn Ihr Verzeichnis /tmp zu klein ist.

Alternativ, wenn Sie sich wirklich sorgen, wie lange es dauern könnte, können Sie 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.

+0

Jede Art, die ihren Namen wert ist, wird das Teilen und Sortieren und Zusammenführen für Sie sowieso tun.Mit nur 1 GB RAM auf dem Zielrechner wird eine 5-GB-Datei mit einer Anzahl von Zwischendateien sortiert, die am Ende zusammengeführt werden. –

+2

In der Tat. Der Punkt des Kommentars war die Möglichkeit, es parallel über mehrere Maschinen hinweg zu tun. – ZoogieZork

0

Wie importieren Sie die Daten in SQL Server mit dem Befehl Bulk Insert?

link text

Dies wird die Daten in die SQL Server sehr schnell und dann können Sie alle Arten von effizienten SQL auszuführen Sorting auf Basis der importierten Daten.

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

Verwandte Themen