Ich habe mal eine Frage zum Umgang mit großen Datenmengen.
Nun ist groß ja relativ. Ich spreche über zwei Stapel aus ASCII-Dateien, welche in Summe jeweils ca. 75-80 Millionen Zeilen haben. Diese beiden Stapel möchte ich vergleichen.
Ich bin hier unentschlossen, ob ich das ganze unbedingt mit einer Datenbank machen müsste, oder ob das evtl. auch im RAM laufen könnte. Benötigt wird der Vergleich nur 1x für eine Auswertung.
Inhalt der Dateien aus Haufen 1:
- Kosolenausgabe von du auf einem Enterprise Storage
- Die Zeilen beinhalten Dateigröße in kB und die Pfadangabe zur Datei.
- Der Dateiname ist einzigartig über einen unique alphanumerischen String. (z.B. something_a1b2c3d4e5f6g7.pdf)
- Für mich interessant ist hier nur die Dateigröße (Integer) und dieser alphanum. String (blau markiert).
- Für Haufen 1 hatte ich bereits im letzten Sommer einen Python Parser geschrieben, der mir diese Sachen in eine MariaDB importiert. Dieser läuft ~3-4 Stunden und befüllt eine Tabelle der Datenbank.
Inhalt der Dateien von Haufen 2:
- Das ist ein Report aus einer Enterprise PLM Applikation. (Teamcenter).
- Die Zeilen beinhalten drei relevante Informationen:
- ------> interner Datenbank Identifier
- ------> externer Identifier (das ist der alphanum. String von oben!)
- ------> Information ob diese Datei noch referenziert wird aus der Datenbank oder nicht.
- Haufen 2 habe ich noch nicht komplett, sondern nur ca. 200k Zeilen Sample.
Ich möchte nun im Grunde die Haufen übereinander legen und wissen, wie viel Speicherplatz auf dem Storage alloziert wird durch Dateien, welche nicht mehr in der Datenbank referenziert sind.
Ich überlege nun ob hier an dieser Stelle MySQL überhaupt nötig und effizient ist und wie ich am besten vorgehe.
Mit Python würde ich nun Haufen 1 importieren in Datenbank-Tabelle 1, und dann den Parser nochmal modifizieren für Haufen 2. Diesen Haufen dann in eine zweite Tabelle rein, und dann mittels Join die Treffer suchen.
Wie kann ich bei so etwas vorhersagen, wie effizient das läuft?
Und wäre es z.B. auch vorstellbar, dass ich dies mit Lazarus / FPC mache und statt einer Datenbank diese ganzen 75 Millionen Records direkt im Arbeitsspeicher vorhalte?
In dem Fall würde ich Haufen 1 Zeile für Zeile in ein Objekt rein laden (UID, Größe), und beim Import von Haufen 2 würde ich immer nach dem passenden Objekt im RAM suchen und ein Bool Flag setzen für referenziert/nicht referenziert).
Am Ende wäre das Aufsummieren aller nicht referenzierten Objekte dann sehr einfach.
Was meint ihr dazu? - Wie geht man am geschicktesten an so eine Aufgabe ran?
Danke und viele Grüße,
Marcus