0

私は次のように辞書に格納されてかなり複雑な、ネストされた(アップとダウンの参照オブジェクトを呼び出す参照)オブジェクト(クラス)を持つプロジェクトがあります。メモリマップトファイルまたは直列化、非常に大きなオブジェクトのスピード

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のデータをゼロからリロードすることはできません(時間がかかります)。

どのように私がこの状況に対処する必要があるかについての提案、アイデアや考え。

+1

長期間の永続性については、問題が発生する可能性があります。たとえば、名前空間を変更するとすぐに問題が発生します。短期間の記憶には問題ありませんが、メモリーの使用には注意が必要ですが、32bitプロセスで問題なく1Gbグラフを直列化することはできません。テーブルにマッピングするとインピーダンスが問題になると思われる場合は、RavenDBなどのドキュメントデータベースを検討して、ドキュメントグラフ全体をディスク上のJSONにマップし、多くのperf問題を処理できますか? –

+0

これらのデータベースは、オブジェクトグラフ(20の相互接続されたクラス)をJSON/BSONに解析し、それらの間のすべての参照を保持して保存できますか?これはどのように作動しますか?私の理想的な考え方は、RavenDBやMongoDBにDObjectをまっすぐにフィードして、すべてをシリアル化して保存することです。 DObjectをRavenDBに入れたい場合の手順は何ですか?私はMongoDBを初めて使いましたが、それについて多くのことを聞きました。 – iefpw

+0

RavenDBがオブジェクトを直接取り込むかどうかは、オブジェクトがどのように構造化されているかによって決まります。 RavenDBはJSon.NETを使用しているので、いつでもJson.NETでルートオブジェクトをダンプしようとすることで始めることができます。 –

答えて

0

DObject自体をメモリマップファイルに保存することはできません。 .NETオブジェクトはいつも動く傾向があり、メモリ内の1つの場所にそれらを強制的に置くことはできません(ピン止めすることはできますが、本当にしたくないのです)。オブジェクトをシリアル化してファイルに書き込むこともできますが、そのたびに1GB以上のデータを書き込むことになります。

標準的な方法ではなく、オブジェクトを一連のデータベーステーブルに「シリアル化」してみませんか?

+0

どうすればいいですか?オブジェクトは、単純な「個人情報」または「連絡先情報」リストではありません。オブジェクト自体には、キーと値のペアの辞書があります。辞書の値には "Lists"があり、リストにはおそらく "Dictionary "が含まれています。オブジェクトは外部オブジェクトなどを参照します。クラスのフィールドが単純な文字列、intの場合、データベーステーブルに保存します。この値には1対多の接続があります。合計で、この辞書のこの価値には約20のクラスが含まれています。 – iefpw

+0

データベーステーブルで言及したすべてのモデルを作成できます。約20のクラスがあれば、約20のテーブルが必要になります。 – zmbq

+0

私はそれがシリアライゼーションとデータベースストアの議論になってきていると思います。私はそれが有効な議論だと思う。 – iefpw

関連する問題