私は、リクエストに応じてアーティファクトを構築するために何千もの小さなファイルを使用するJavaWebアプリケーションに取り組んでいます。これらのファイルをディスク全体で実行して常に見つけるのではなく、これらのファイルをメモリにマップできれば、システムのパフォーマンスが向上すると思います。
Linuxでmmapについて聞いたことがありますが、その概念の基本的な理解は、ファイルがディスクから読み取られると、ファイルの内容がメモリのどこかにキャッシュされ、その後のアクセスが速くなるということです。私が考えていることはその考えに似ていますが、私のWebアプリが最小限の要求時間応答のために初期化しているので、mmap可能なファイルのセット全体をメモリに読み込みたいという点が異なります。
ここでの私の思考訓練の1つの側面は、ファイルがすべてタール化され、何らかの方法で仮想ファイルシステムとしてJVMにマウントされた場合、ファイルをjvmメモリにすばやく取り込むことができるということです。現状では、現在の実装がソースファイルのセットを調べて、ディスク上にあるものをすべて把握するのに数分かかる場合があります。これは、基本的に300,000を超えるファイルのファイル統計を実行しているためです。
tarファイルから情報を読み取ることができるapacheVFSプロジェクトを見つけましたが、「また、tar全体をメモリに読み込んで保持する」などの指定ができるかどうかは、ドキュメントからはわかりません。
ここでは、マルチスレッド環境について話しています。アーティファクトは、通常、300,000以上のソースファイルの完全なセットから約100の異なるファイルをつなぎ合わせて、1つの応答を作成します。したがって、仮想ファイルシステムソリューションが何であれ、スレッドセーフでパフォーマンスが高い必要があります。ここでは、ファイルの読み取りについてのみ説明しており、書き込みについては説明していません。
また、32ギガのRAMを搭載した64ビットOSを実行しており、300,000ファイルは約1.5〜2.5ギガのスペースを占有します。確かに、2.5ギガバイトのファイルを300Kの小さな数キロバイトサイズのファイルよりもはるかに高速にメモリに読み込むことができます。
入力ありがとうございます!
- ジェイソン