Java を使用して、最終的に 100 GB を超えるデータ構造を処理したいと考えています。1 秒あたりできるだけ多くの回数、1:1 の比率で書き込みと読み取りを行う必要があります。Java 形式では、HashMap> です。あたかも RAM にあるかのように、ディスクに保存して操作することはできますか? これは永続化スキームとしても機能しますか?
3 に答える
ここで役立つ「キャッシュ」パッケージがあります。Ehcacheが思い浮かびます。有限数のオブジェクトをメモリに格納し、追加のオブジェクトをディスクにオーバーフローさせるキャッシュを作成できます。これはすべてバックグラウンドで行われるため、キャッシュから get/put するだけで済みます。
いいえ、Javaではディスクファイルをヒープとして使用することはできません。ファイルをアドレス空間にマップすることはできますが、それはヒープの一部にはなりません。つまり、通常のJavaオブジェクトを保持するためにそれを使用することはできません。
これを行う最も簡単な方法(十分なRAMがあり、64ビットOSと64ビットJVMを実行している場合)は、JVMに巨大なヒープを与えることです。しかし、これはあなたの選択肢ではないと思います。したがって、オプションは次のようになります。
- 従来のデータベースを使用する
- Java用の既存の既製のデータキャッシング製品を使用する
- 独自のデータキャッシングをロールしてみてください。
可能ですが、まずアクセス パターンを理解する必要があります。SSD を使用していない場合に大量のデータをランダムにシークする場合、IO ごとに数ミリ秒の待機時間が発生します。特定の領域内でのみシークしている場合は、それらの部分をメモリに叩きつけたい場合があります。可能な限りアクセス パターンに合わせてデータがクラスター化されるように整理してください。