オブジェクトの配列 (画像など) がありますが、大きすぎてメモリに収まりません (40GB など)。しかし、私のコードは実行時にこれらのオブジェクトにランダムにアクセスできる必要があります。
これを行う最善の方法は何ですか?
もちろん、私のコードの観点からは、一部のデータがディスク上にあるか、メモリに一時的に格納されているかは問題ではありません。透過的なアクセスが必要です。
container.getObject(1242)->process();
container.getObject(479431)->process();
しかし、このコンテナをどのように実装すればよいでしょうか? リクエストをデータベースに送信するだけですか?もしそうなら、どれが最良の選択肢でしょうか?(データベースの場合は、無料で、管理の手間があまりかからないようにする必要があります。おそらく、Berkeley DB か sqlite でしょうか?)
自分で実装して、アクセス後にオブジェクトをメモ化し、メモリがいっぱいになったときにメモリをパージする必要がありますか? または、これに適したライブラリ (C++) はありますか?
コンテナーの要件は、ディスク アクセスを最小限に抑え (一部の要素はコードによってより頻繁にアクセスされる可能性があるため、メモリ内に保持する必要があります)、高速アクセスを可能にすることです。
更新:コンテナーに格納するオブジェクトのサイズが動的であるため、STXXL は問題に対して機能しないことが判明しました。しかし、STXXL はそれを処理できません。
STXXL コンテナーは、格納するデータ型がプレーン オールド データ型 (POD) であることを前提としています。 http://algo2.iti.kit.edu/dementiev/stxxl/report/node8.html
他のソリューションについてコメントしていただけますか?データベースの使用についてはどうですか?そしてどれ?