私のデータベースにはテーブルがいくつかあります。実際にそこに行く前にエントリがあるかどうか知りたいのですが。データベース内にあるエントリがあることを知っています
私はいくつかの高速アプリケーションを持っており、データベースに対する呼び出し回数を減らしたいと考えています。
私はテーブルに約35.000のエントリを持っています。
私は何らかの種類のハッシュ関数を持つブルームフィルタがあると思っていました。
良いアイデアですか、他に何をすべきか考えていますか?
ありがとうございました。
私のデータベースにはテーブルがいくつかあります。実際にそこに行く前にエントリがあるかどうか知りたいのですが。データベース内にあるエントリがあることを知っています
私はいくつかの高速アプリケーションを持っており、データベースに対する呼び出し回数を減らしたいと考えています。
私はテーブルに約35.000のエントリを持っています。
私は何らかの種類のハッシュ関数を持つブルームフィルタがあると思っていました。
良いアイデアですか、他に何をすべきか考えていますか?
ありがとうございました。
データベースの呼び出しが遅すぎると思われる場合は、データベースにインデックスを挿入するだけです。ルックアップの速度が向上し、ローカルキャッシュが不要になることがあります。
ローカルキャッシュが本当に必要な場合は、HashSet<T>
を使用してレコードのキーを格納できます。鍵が約O(1)時間内に存在するかどうかを確認するには、hashSet.Contains
を使用してください。
すでにデータベースのキャッシュを実装しているので、キーだけでなくテーブルからのデータもローカルに格納することを検討することもできます。このためにはDictionary<TKey, TValue>
を使用できます。
Mark Byers:.NET 2.0で動作します –
@Night Walker:HashSetは.NET 2.0では使用できませんが、Dictionaryは使用できません。 .NET 2.0では、HashSetではなくDictionaryを使用できます。値としてnullを格納するだけです。または、HashSetの実装を提供する外部ライブラリを探します。 –
@Mark Byers:データベースが変更されたときに、どのようにして新しい辞書で新しい辞書を取得できるか。データベースに行ったり、新しいデータベースを構築したりせずに。 –
ローカルメモリにデータテーブル全体をキャッシュするのはどうでしょうか?
ローカルメモリから選択した行
35Kエントリはうまく設計されたテーブルには時間がない中で、そのデータのアップを見ることができるはずです、本当にたくさんではありません。 – leppie
leppie:ここでの問題は、ネットワークが遅いです。 –
leppie:最悪の場合、1秒間に約14のデータベースコールを話しています。私は遅いネットワークを恐れています。 –