In der Vergangenheit musste ich mit großen Dateien arbeiten, irgendwo im Bereich von 0,1-3 GB. Es wurden nicht alle 'Spalten' benötigt, daher war es in Ordnung, die restlichen Daten in den RAM zu schreiben.
Jetzt muss ich mit Dateien im Bereich 1-20GB arbeiten, und sie werden wahrscheinlich mit der Zeit wachsen. Das ist völlig anders, weil Sie die Daten nicht mehr in den Arbeitsspeicher laden können.
Meine Datei enthält mehrere Millionen Einträge (ich habe einen mit 30 mil Einträgen gefunden). Bei der Eingabe besteht in etwa 10 'Spalten': eine Zeichenfolge (50-1000 Unicode-Zeichen) und mehrere Zahlen. Ich muss die Daten nach 'Spalte' sortieren und anzeigen. Für den Benutzer sind nur die oberen Einträge (1-30%) relevant, der Rest sind Daten niedriger Qualität.
Also brauche ich ein paar Vorschläge, in welche Richtung ich gehen soll. Ich möchte definitiv keine Daten in einer Datenbank ablegen, da sie schwer zu installieren und für Nicht-Computer-versierte Personen zu konfigurieren sind. Ich liefere gerne ein monolithisches Programm.
Das Anzeigen der Daten ist überhaupt nicht schwierig. Aber sortieren ... ohne die Daten im RAM zu laden, auf normalen PCs (2-6GB RAM) ... wird einige gute Stunden töten.
Ich habe ein wenig in MMF (Memory Mapped Files) gesucht, aber dieser Artikel von Danny Thorpe zeigt, dass es möglicherweise nicht passend ist: Ссылка
Also habe ich darüber nachgedacht, nur die Daten aus der Spalte zu laden, die in RAM und einem Zeiger auf die Adresse (in die Datei) des 'Eintrags' sortiert werden soll. Ich sortiere die 'Spalte', dann benutze ich den Zeiger, um den Eintrag zu finden, der jeder Spaltenzelle entspricht, und stelle den Eintrag wieder her. Die 'Wiederherstellung' wird direkt auf die Festplatte geschrieben, so dass kein zusätzlicher Arbeitsspeicher benötigt wird.
PS: Ich suche nach einer Lösung, die sowohl auf Lazarus als auch auf Delphi funktioniert, weil Lazarus (eigentlich FPC) 64 Bit Unterstützung für Mac hat. 64 Bit bedeutet mehr RAM verfügbar = schnelleres Sortieren.