Ich brauche diese Aufgabe in Java-Code. Ich habe 2 große Dateien um 5GB jeweils mit Textdaten von mehreren Zeilen. Jede Zeile ist eine Zeile mit durch Kommas getrennten Feldern, zum Beispiel "Name, EmpId, Bezeichnung, Adresse, ... usw. bis zu 30 Felder". Ich muss diese 2 Dateien lesen und schreibe die Datensätze in eine andere Datei mit zusätzlichen Feld, die angibt, dass die angegebene Datenzeile geändert, nicht geändert, hinzugefügt oder gelöscht wird. Zum BeispielDatei diff von großen Dateien
File1
Tom, E100, Ingenieur
Rick, E200, Ingenieur
File2
Tom, E100, Leiter
Paul, E300, Clerk
Result
Tom, E100, Manager geändert
Paul, E300, Clerk, Hinzugefügt
Rick, E200, Ingenieur, Deleted
Ansatz I verwendet wird, schaffen eine Karte aus den Daten von file1 EmpID als Schlüssel und ganze Datenzeile als Wert mit (unter der Annahme EmpID eindeutig ist) und dann jeden Datensatz von file2 gegen die Daten in der Karte zu überprüfen, lesen (I nicht Inhalt von datei2 in dem Speicher lese , b Verwenden Sie nur file1, um die Karte zu erstellen. Ich verwende BufferedReader/BufferedWriter zum Lesen und Schreiben.
Dieser Ansatz funktioniert gut, aber nur für kleine Datendatei. Angesichts von Datendateien, die in GBs ausgeführt werden, hat mein Programm sehr bald nicht genügend Arbeitsspeicher, während es versucht, die Karte zu erstellen.
Was wäre der richtige Ansatz sein, um diese Aufgabe zu erreichen, sowohl in Bezug auf Speicher und Geschwindigkeit der Ausführung?
Danke, LX
Könnten Sie die Dateien von ** empID ** bestellt bekommen? Dann müssten Sie keine der Dateien im Speicher speichern. (Also sortiere sie vielleicht um ** empID **). – MrSmith42
Verwandte: http://stackoverflow.com/q/30653705/572670 – amit