Ich suche nach Sortieralgorithmen, die mit einer großen Datenmenge arbeiten können, dh die auch dann funktionieren, wenn nicht der gesamte Datensatz gleichzeitig im Hauptspeicher gespeichert werden kann.
Der einzige Kandidat, den ich bisher gefunden habe, ist die Sortierung nach Zusammenführung: Sie können den Algorithmus so implementieren, dass er Ihren Datensatz bei jeder Zusammenführung durchsucht, ohne alle Daten gleichzeitig im Hauptspeicher zu speichern. Die Variation der Zusammenführungssorte, die ich im Auge habe, wird in diesem Artikel im Abschnitt Verwenden mit Bandlaufwerken beschrieben .
Ich halte dies für eine gute Lösung (mit der Komplexität O (nx log (n))), bin aber gespannt, ob es andere (möglicherweise schnellere) Sortieralgorithmen gibt, die für große Datenmengen geeignet sind, die nicht in den Hauptspeicher passen.
BEARBEITEN
Hier sind einige weitere Details, wie in den Antworten gefordert:
- Die Daten müssen regelmäßig sortiert werden, z. B. einmal im Monat. Ich muss nicht einige Datensätze einfügen und die Daten inkrementell sortieren lassen.
- Meine Beispieltextdatei hat ungefähr 1 GB UTF-8-Text, aber ich wollte das Problem generell lösen, auch wenn die Datei beispielsweise 20 GB groß wäre.
- Es befindet sich nicht in einer Datenbank und kann aufgrund anderer Einschränkungen nicht vorhanden sein.
- Die Daten werden von anderen als Textdatei gespeichert, ich habe meinen eigenen Code, um diese Textdatei zu lesen.
- Das Format der Daten ist eine Textdatei: Neue Zeilenzeichen sind Satztrennzeichen.
Eine mögliche Verbesserung bestand darin, die Datei in Dateien aufzuteilen, die klein genug sind, um im Speicher sortiert zu werden, und schließlich alle diese Dateien mit dem oben beschriebenen Algorithmus zusammenzuführen.