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
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.
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.
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 .
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?
Wie wäre es, wenn Sie die Daten mit dem Befehl Massen einfügen in SQL Server importieren?
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.