2011-01-06 3 views
0

私のデータベースにはテーブルがいくつかあります。実際にそこに行く前にエントリがあるかどうか知りたいのですが。データベース内にあるエントリがあることを知っています

私はいくつかの高速アプリケーションを持っており、データベースに対する呼び出し回数を減らしたいと考えています。

私はテーブルに約35.000のエントリを持っています。

私は何らかの種類のハッシュ関数を持つブルームフィルタがあると思っていました。

良いアイデアですか、他に何をすべきか考えていますか?

ありがとうございました。

+0

35Kエントリはうまく設計されたテーブルには時間がない中で、そのデータのアップを見ることができるはずです、本当にたくさんではありません。 – leppie

+0

leppie:ここでの問題は、ネットワークが遅いです。 –

+0

leppie:最悪の場合、1秒間に約14のデータベースコールを話しています。私は遅いネットワークを恐れています。 –

答えて

2

データベースの呼び出しが遅すぎると思われる場合は、データベースにインデックスを挿入するだけです。ルックアップの速度が向上し、ローカルキャッシュが不要になることがあります。

ローカルキャッシュが本当に必要な場合は、HashSet<T>を使用してレコードのキーを格納できます。鍵が約O(1)時間内に存在するかどうかを確認するには、hashSet.Containsを使用してください。

すでにデータベースのキャッシュを実装しているので、キーだけでなくテーブルからのデータもローカルに格納することを検討することもできます。このためにはDictionary<TKey, TValue>を使用できます。

+0

Mark Byers:.NET 2.0で動作します –

+0

@Night Walker:HashSetは.NET 2.0では使用できませんが、Dictionaryは使用できません。 .NET 2.0では、HashSetではなくDictionaryを使用できます。値としてnullを格納するだけです。または、HashSetの実装を提供する外部ライブラリを探します。 –

+0

@Mark Byers:データベースが変更されたときに、どのようにして新しい辞書で新しい辞書を取得できるか。データベースに行ったり、新しいデータベースを構築したりせずに。 –

0

ローカルメモリにデータテーブル全体をキャッシュするのはどうでしょうか?

ローカルメモリから選択した行

関連する問題