私はIListとして実装された巨大な時系列で時系列的に操作を実行する必要があります。データは最終的にデータベースに格納されますが、データベースには何千万ものクエリを提出することは意味がありません。メモリマップされたファイル "メモリ内の"大きなデータセットを格納するためのIList実装?
現在、メモリ内のIListは、800万(小)以上のオブジェクトを格納しようとするとOutOfMemory例外をトリガしますが、何千万もの処理が必要です。
いくつかの調査の末、ディスクにデータを格納してIListラッパーを使用してデータにアクセスするのが最善の方法です。
Memory-mapped files(.NET 4.0で導入されました)は適切なインターフェイスのようですが、IList(簡単なアクセス用)を実装し、メモリマップファイルを内部的に処理するクラスを作成する最善の方法は何ですか?
他の方法について知っている場合は、私も興味があります。私は、db4oからのデータを使用してIListラッパーを考えました(、メモリマップファイルをIoAdapterFileとして使用していますが、おそらくdb4oを使用するとメモリマップファイルと直接対比してパフォーマンスが向上します)。
私はthis questionに尋ねました2009年に尋ねましたが、それは有用な答えや深刻なアイデアをもたらしませんでした。
に部分だけをマッピングするために、「スライディングウィンドウ」のいくつかの並べ替えを使用する以外さメモリマップトファイルと固定構造のサイズオフセットを介して(アレイ状のアクセスを使用する)が、物理メモリが限界であることに注意してくださいシーケンシャルに実行する操作は?またはデータ全体を一度に操作していますか? – Yahia
アクセスはシーケンシャル(更新を実行するためにコレクションを繰り返す)でなければなりません。また、遠端のオブジェクトを削除/削除する必要があります。 –
データベースはこの仕事に適したツールです。データベースの呼び出しが多すぎないように、バッチでデータを更新します。物事を少し速くするためにmap-reduceスタイルの処理に興味があるかもしれません。 – dtb