私は次のように辞書に格納されてかなり複雑な、ネストされた(アップとダウンの参照オブジェクトを呼び出す参照)オブジェクト(クラス)を持つプロジェクトがあります。メモリマップトファイルまたは直列化、非常に大きなオブジェクトのスピード
public static Dictionary<string, Object1> DObject { get; set; }
をObject1は複雑なクラスです。それは "アドレス帳"や "人の情報"クラスのようではありません。クラス自体には配列、別のオブジェクトの辞書があります。これらのオブジェクト参照は、その上にあるクラスなどです。
DObjectのサイズはメモリ内で1GB +になる可能性があるため、BinaryFormatterを使用してファイルにシリアル化します。私はこのオブジェクトをロードする必要があるので、私はMemoryMappedFileを使用することを考えていました。新しいキーと値が辞書に追加されることがあります。オブジェクトのデータが増えたり更新されたりする可能性があります.MMFのサイズは変更されますか?どのように私はメモリマップされたファイルのDObjectの特定のキーにアクセスするのですか?メモリにハッシュテーブルのような検索メカニズムがあるので、辞書のような特定のキーを見つけてその価値を得ることができますか?このMMFはどうして仕組みですか?
私の理想的な考えです。ディスクに大きなファイル(2GB以上)があります。私は、ディスク上に保存されたメモリを持つように、辞書の中のオブジェクトを高速に更新します。すべてが速いです。 Key-Valueは一生懸命に見上げます。私は検索し、値を編集し、保存するなど...私はこの2GB +オブジェクトにすばやくアクセスする必要があります。 WCFサーバーが再起動したら、この2GB +サイズのオブジェクトにすばやくアクセスする必要があります。だから、私は1)シリアル化2)を考えていた。 MMFへの読み込みと読み込みを行います。私の主な関心事はこの瞬間のスピードです。別の言葉でプロジェクトをデバッグするたびに、この2GBのデータをゼロからリロードすることはできません(時間がかかります)。
どのように私がこの状況に対処する必要があるかについての提案、アイデアや考え。
長期間の永続性については、問題が発生する可能性があります。たとえば、名前空間を変更するとすぐに問題が発生します。短期間の記憶には問題ありませんが、メモリーの使用には注意が必要ですが、32bitプロセスで問題なく1Gbグラフを直列化することはできません。テーブルにマッピングするとインピーダンスが問題になると思われる場合は、RavenDBなどのドキュメントデータベースを検討して、ドキュメントグラフ全体をディスク上のJSONにマップし、多くのperf問題を処理できますか? –
これらのデータベースは、オブジェクトグラフ(20の相互接続されたクラス)をJSON/BSONに解析し、それらの間のすべての参照を保持して保存できますか?これはどのように作動しますか?私の理想的な考え方は、RavenDBやMongoDBにDObjectをまっすぐにフィードして、すべてをシリアル化して保存することです。 DObjectをRavenDBに入れたい場合の手順は何ですか?私はMongoDBを初めて使いましたが、それについて多くのことを聞きました。 – iefpw
RavenDBがオブジェクトを直接取り込むかどうかは、オブジェクトがどのように構造化されているかによって決まります。 RavenDBはJSon.NETを使用しているので、いつでもJson.NETでルートオブジェクトをダンプしようとすることで始めることができます。 –