私はこのタスクをjavaでコーディングする必要があります。 私は、それぞれが5GBの2つの大きなファイルを持っていて、複数の行のテキストデータを含んでいます。各行は、カンマで区切られたフィールドの行です(例: "name、empId、designation、address、...、最大30フィールドまで")。これらの2つのファイルを読んで、別のファイルにレコードを書き込む必要があります。このフィールドは、指定されたデータ行が変更、変更、追加、削除されたことを指定します。 例えば大きなファイルのファイル差分
はFile1
トム、E100、エンジニア
リック、E200、エンジニア
File2の
トム、E100、マネージャー
ポール、 E300、書記官
ResultFile
トム、E100、マネージャー、変更
ポール、E300、書記官、追加
リック、E200、エンジニア、私が使用し
アプローチを作成することです削除されましたempIdをキーとして使用し、データ行全体を値として(empIdが一意であると仮定して)file1のデータからマップを作成し、file2から各レコードを読み取ってマップのデータをチェックします(file2の全内容をメモリに読み込まない、bマップを作成するにはfile1のみ)。私は、BufferedReader/BufferedWriterを読み書きするために使用しています。
このアプローチは正常に機能しますが、小さなデータファイルに対してのみ有効です。私のプログラムは、GBに実行されるデータファイルがあれば、マップを作成しようとしている間にすぐにメモリ不足になります。
メモリと実行速度の両方でこのタスクを達成するための正しいアプローチは何でしょうか?
おかげで、 LX
** empId **によって注文されたファイルを入手できますか?メモリにファイルを保存する必要はありません。 (だから、** empId **でそれらを並べ替える)。 – MrSmith42
関連:http://stackoverflow.com/q/30653705/572670 – amit