0

変更された/同様の議論がすでにここで行われている可能性があると確信していますが、私が直面している正確な問題を、私の側から考えられる解決策とともに提示したいと思います. 次に、より良いアプローチとは何か、または私の論理をどのように承認できるかについて、皆さんから聞きたいと思います。

問題 行を含む巨大なファイルがあります。各行は次の形式です<weight>,<some_name>。今私がしなければならないことは、同じ名前を持つすべてのオブジェクトの重みを追加することです. 問題は

  1. some_nameファイルにどれくらいの頻度で存在するかわかりません。1 回だけ表示される場合もあれば、数百万のすべてが表示される場合もあります。
  2. 注文されていません
  3. ファイル ストリームを使用しています (Java 固有ですが、問題ではありません)。

解決策 1 : 私が巨大な RAM を持っていると仮定すると、私が計画しているのは、ファイルを 1 行keyずつ読み取り、hash_map のように名前を使用することです。すでに存在する場合は合計し、そうでない場合は追加します。mRAM(m =ファイル内の行数)がかかりますが、全体的な処理は高速です

解決策 2 : 巨大な RAM を持っていないと仮定して、バッチで実行します。ハッシュテーブルの最初の 10,000 を読み取り、合計してファイルにダンプします。ファイルの残りの部分に対して実行します。ファイルの処理が完了したら、処理されたファイルの読み取りを開始し、このプロセスを繰り返してすべてを合計します。

ここで何を提案しますか?

あなたの提案に加えて、ファイルの並列ファイル読み取りを実行できますか? ここで FileInputStream にアクセスできます。ファイルの読み取りをより効率的にするために fileInputStream を使用できますか?

4

2 に答える 2