Ich gehe davon aus, dass es viel mehr Daten könnten dann gab Sie in Ihrem Beispiel . Wenn Sie alle Dateien gleichzeitig öffnen können, können Sie diesen Algorithmus verwenden:
Lesen Sie die erste Zeile aus jeder Datei, so haben Sie 10 Zeilen im Speicher, eine aus jeder Datei.
Versetzen Sie die Zeilen in eine Prioritätswarteschlange nach der Sortierreihenfolge.
Das kleinste Element (sortiert zuerst) aus der Prioritätswarteschlange nehmen und in die Ausgabedatei schreiben.
Lesen Sie eine weitere Zeile aus der entsprechenden Datei, aus der die Zeile kam, und fügen Sie diese in die Prioritätswarteschlange ein.
Wiederholen Sie den Vorgang, bis alle Dateien bis zum Ende gelesen wurden.
Beachten Sie, dass Sie nicht alle Dateien gleichzeitig im Speicher ablegen müssen. Dies funktioniert also gut, wenn Sie eine angemessene Anzahl großer Dateien haben, aber nicht, wenn Sie viele kleine Dateien haben.
Wenn Sie viele kleine Dateien haben, sollten Sie sie in Gruppen zusammenführen, um eine einzelne Ausgabedatei für jede Gruppe zu erstellen, und dann den Vorgang wiederholen, um diese neuen Gruppen zusammenzuführen.
In C# können Sie zum Beispiel eine SortedDictionary
verwenden, um die Prioritätswarteschlange zu implementieren.
Mit oder ohne doppelten Datensätze? – Bobby
Was verhindert, dass Sie eine In-Memory-Sortierung durchführen und in eine Datei schreiben? Mit anderen Worten, was sind Ihre Einschränkungen? –
Ich wäre versucht zu sagen, laden oder einfach alle 9 Dateien anhängen und neu sortieren. Angesichts des Overheads des Dateizugriffs kann ich mir keinen vernünftigen Grund vorstellen, die Dateien beim Verschmelzen zu verschachteln. Wenn es sich um eine Gesamtaufzeichnungslast handelt, die größer ist als der verfügbare Speicher, ist Live komplexer. – Lazarus