2011-04-21 8 views
0

ディスクに大量のデータをキャッシュする必要があるという要件があります。 データベースに変更があるたびに、データはデータベースから取得され、ディスクにキャッシュされます。私は、キャッシュされたデータをデータベースでチェックし、必要に応じて更新するバックグラウンドプロセスを実行します。ディスクに大量のデータをキャッシュする

ディスクにキャッシュされたデータを整理する最良の方法は何かを知りたいので、キャッシュからの書き込みと読み取りを高速にすることができます。 別のスレッドを使用して、dbから新しいデータを取り出し、ディスクにキャッシュします。 2つのスレッド間の同期も考慮する必要があります(1つは既存のキャッシュデータを更新し、もう1つは新しくフェッチしたデータをキャッシュに書き込むことになります)。 キャッシュ上のデータを整理するための戦略を提案し、また、スレッド間の同期。

+4

これはクレイジーです。ディスクのキャッシュ?あなたはディスク上に 'アーカイブ 'を意味しましたか?データベースには既にキャッシュが組み込まれています。誰かが手作業で作成したストレージよりも効率的でインテリジェントなものです。 – Aliostad

+1

はい、ハードディスクにキャッシュします。これは、複数のデータベース呼び出しとデータベースサーバーからのデータ転送を避けるためです。 – KhanS

+1

キャッシュされていません。それは「アーカイブ」です。キャッシングは、**より揮発性のストレージ**に保存することによって物事をスピードアップすることを目的としています。それはあなたがやっていることではありません。 – Aliostad

答えて

1

SQL ServerにはXMLテーブルというものがあります。これらのテーブルは、ディスクにある物理的なXMLファイルに基づいています。ディスク内のXMLデータをSQL Serverのテーブルにマップ/リンクすることができます。ユーザーにとってはシームレスです。言い換えれば、それらの表を通常の表として参照します。ディスク上の膨大なデータをキャッシュに関する技術的/哲学的な議論に加えて、これは単なるアイデアです

...

1

は、あなたがデータの、一貫性を保つ意識しないといけませんの?停電時に?

メモリーと一緒にファイルをマッピングしoccationalフラッシュがporbablyあなたがデータへのインデックス付きアクセスを持っている必要がありますか

をしたいしたいのですか?

おそらく、Bツリー実装またはB +ツリー実装を設計する必要があります。索引付けされたデータを効率的に取得し、ブロック・レベルのロックを改善します。代替の答えとして

http://code.google.com/p/high-concurrency-btree/

0

、私自身のB+Tree implementationはきちんとIDictionaryを<処理鍵、TValue >の完全マネージコード(C#の)実装としてこの問題に対処します。これは、スレッドセーフであり、並行処理のために最適化された単一ファイルのキー/値ストアです。これは、この目的のために、ライトスルーキャッシュを提供するために、明確に根底から構築されたものです。

関連する問題