11

大量のデータをキャッシュするためのソリューションを探しています。

関連する質問ですが、言語が異なります:

別の用語で質問を閉じる:

私は永続性、トランザクション、スレッドセーフなどを必要とせず (または何も支払いたくない)、List<> または Dictionary<> よりも使用するのがそれほど複雑ではないものを望んでいます。

コードを書かなければならない場合は、一時ディレクトリにすべてをファイルとして保存します。

string Get(int i)
{
   File.ReadAllText(Path.Combine(root,i.ToString());
}

私の場合、インデックスは になりますint(そして、それらは連続しているか、十分に近い必要があります) とデータは になります。そのため、 PODstringの両方を処理することから逃れることができ、むしろ超軽量にして正確にそれを行うことができます。

使用法は、合計 650MB の 3k ファイル (ファイル #1 から #3000 のように) のシーケンスがあり、シーケンスの各ステップに対して diff を実行する必要があることです。私はそれがほぼ同じかそれ以上になると予想しており、そのすべてをメモリに保持したくありません(私ができないところにより大きなケースが発生する可能性があります)。


多くの人が私の問題に対してさまざまな解決策を提案しています。しかし、私の小さなニッチをターゲットにしたものはないようです。私がディスク バックアップ キャッシングを検討している理由は、現在の使用量が使用可能なアドレス空間の 1/3 から 1/2 を使い果たすと予想しているからです。大きいケースだとスペースがなくなるのではないかと心配です。トレッド、永続性、または複製については心配していません。私が探しているのは、最小限のコード、最小限の使用フット プリント、最小限のメモリ オーバーヘッド、最小限の複雑さを使用する最小限のソリューションです。

私は楽観的すぎると思い始めています。

4

10 に答える 10

4

本当に欲しいのはBツリーです。これが、データベースが使用する主要なデータ構造です。必要に応じて、データ構造の一部をディスクとの間で効率的に交換できるように設計されています。

C#用に広く使用されている高品質のスタンドアロンBツリー実装を知りません。

ただし、これを取得する簡単な方法は、SqlCompactデータベースを使用することです。Sql Compactエンジンはインプロセスで実行されるため、個別のサービスを実行する必要はありません。それはあなたにb-treeを与えますが、すべての頭痛の種はありません。SQLを使用してデータにアクセスできます。

于 2009-01-03T02:07:24.960 に答える
2

免責事項-私が関わっている製品を紹介しようとしています。

私はまだWebサイト側で作業しているので、多くの情報はありませんが、SerialKillerがこれに適しています。.Netシリアル化を使用する例があります(例を提供できます)ので、.Netシリアル化可能なオブジェクトの永続的なマップキャッシュを作成するのは簡単です。

十分な恥知らずな自己宣伝-興味がある場合は、ウェブサイトの連絡先リンクを使用してください。

于 2009-01-03T02:06:09.173 に答える
2

これは私の質問と非常によく似ています

C# での単純なスタンドアロン永続辞書の実装を探しています

あなたが望むものにぴったり合うライブラリは存在しないと思います.githubの新しいプロジェクトの時かもしれません.

于 2009-01-04T22:20:54.197 に答える
1

.net の B-Tree 実装は次のとおりです: http://bplusdotnet.sourceforge.net/

于 2009-03-03T04:56:27.117 に答える
0

こちらもNCacheをご覧ください。

私はこの会社とは関係がありません。無料のエクスプレスバージョンをダウンロードしてテストしました。

于 2009-01-03T02:00:42.430 に答える
0

EhCache Java アプリケーションを .NET に部分的に移植しました。分散キャッシングはまだ実装されていませんが、単一ノードでは、元の UnitTests はすべてパスします。完全なオープンソース:

http://sourceforge.net/projects/thecache/

必要に応じてバイナリ ドロップを作成できます (現在はソースコードのみが利用可能です)

于 2009-01-03T04:39:02.860 に答える
0

組み込み DB ルート (SQLite、Firebird) を使用しますが、他のオプションを次に示します。

于 2009-01-03T05:48:53.733 に答える
0

ディスク ベースのキャッシュ ソリューションでMS アプリケーション ブロックを使用できます

于 2009-01-03T01:19:53.743 に答える
0

MS の Enterprise Library の Caching Application ブロックをお勧めします。これも推奨されましたが、リンクは Enterprise Library の Data Access 部分に関する記事を指しています。

キャッシュ アプリケーション ブロックへのリンクは次のとおりです。

http://msdn.microsoft.com/en-us/library/cc309502.aspx

具体的には、新しいバッキング ストアを作成する必要があります (ディスクに保持されるバッキング ストアがない場合)。

http://msdn.microsoft.com/en-us/library/cc309121.aspx

于 2009-01-03T06:19:55.230 に答える
0

質問に対する最近の編集を考慮して、再利用できるライブラリにまとめられたこのような素朴なソリューションを見つける可能性は非常に低いため、質問に記載されているソリューションを実装することをお勧めします。

于 2009-01-03T23:33:33.317 に答える