まず、「巨大な CSV ファイルを読み込んでいます」と「40MB の CSV ファイルを解析しています。」ここには 10 ギガバイト以上のスペース区切りのファイルがあります。これらを何と呼びますか?
また、ファイルのサイズは関係ありません。通常は行ごとに処理します。
私が抱えている唯一の問題はパフォーマンスです。もちろんかなり遅いです
定義。何が遅いと思いますか?それらの解析は、適切に行われると非常に高速です。
これを改善できる方法があるかどうか知りたいのですが、見つけたキーで検索してループを停止するだけでよいため、エントリがファイルの先頭にある場合はすぐに終了しますが、しばらく時間がかかります。
CSV ファイルを使用しないでください。60 年以上前に、人々はこのためのデータベースを発明しました。
逐次解析アルゴリズムを改善する方法はありますか?
あなたは、解析を別のスレッドに引き込み、効率的なコードを使用することを除いて意味します(あなたが持っていないかもしれません-誰も知りません)。
理論的には、次のことができます。
適切なバッファーを使用して、1 つのスレッドで読み取ります (IO が少ない = 高速)
フィールド分割をスレッド 2 に移動 (オプション)
タスクを使用してフィールドを解析します (フィールドごとに 1 行に 1 つ) ので、すべてのプロセッサを使用できます)。
私は現在、いくつかの (約 10.000) ファイル (悲しいことに 2 桁のギガバイトのサイズ) を処理しています... 私はこの方法 (特定の順序で処理する必要があります) でコンピューターを完全に使用します。
それはあなたに多くを与えるはずです-そして真剣に、40MBのファイルは0.x秒(0.5 - 0.6)でロードするはずです.
それでも、それは非常に非効率的です。すべての人のようにファイルをデータベースにロードしない理由はありますか? CSV は、一部のトランスポート形式としては優れていますが、データベースとしては最悪です。