NCache キー値ストアです。 キャッシュされたアイテムをキーですばやく取得します。 ただし、キャッシュされたエントリを他のプロパティで検索することもできます。 たとえば、キャッシュされた商品をキーで検索する代わりに、カテゴリ、価格帯、重量で検索することもできます。 キャッシュされたアイテムにインデックスを付けて検索可能にする方法を学びましょう。
検索
キーによるアイテムの検索とは別に、 NCache、SQL に似た構文を使用して、キャッシュされたエントリをクエリできます。 SELECT および DELETE クエリを記述して、エントリを検索および削除できます。 NCache INSERT または UPDATE クエリをサポートしていません。 データベースの SELECT クエリと同様に、プロジェクション、キャッシュされたオブジェクト全体、またはキーのみを取得できます。 また、 NCache サポート 基本的なクエリと論理演算子と集計関数.
たとえば、製品を保存している場合、SELECT FROM Product WHERE UnitPrice <= 5.00` のようなクエリを記述して、価格が 5 未満のすべてのキャッシュされた製品を見つけることができます。アイテムを検索し、演算子と集計関数を使用する方法のその他の例については、 、使用してチェック 分散キャッシュを使用した SQL クエリ.
インデキシング
リレーショナル データベースとは異なり、他の属性でアイテムを検索するには、 NCache 索引が必要です。 それ以外の場合は、キャッシュ全体をスキャンして、アイテムとそれに関連するプロパティを見つける必要があります。 それは作ります NCache 遅い。 インデックスを使用すると、検索操作が高速になります。 オブジェクトのプロパティを SQL のような検索クエリで使用するには、最初にインデックスを作成する必要があります。 オブジェクトのすべてのパブリック、プライベート、および保護されたプリミティブ フィールドとプロパティにインデックスを付けることができます。 参照型のフィールドまたはプロパティにインデックスを付けることはできないことに注意してください。 一度 NCache アイテムをインデックスに追加し、検索クエリの基準を満たす場合、クエリの結果として返されます。
インデックスを定義するメカニズムは XNUMX つあります。 NCache: 静的および動的索引付け。
静的インデックス作成
カスタム オブジェクトを検索するには、最初にインデックスを作成する必要があります。 構成の変更またはプログラムによって、インデックスを定義できます。
設定によるインデックスの作成
を使用してインデックスを作成できます NCache Manager または Powershell コマンドレット。 まず、キャッシュを停止し、インデックスを作成して、再起動する必要があります。 の NCache Manager は、クラスを含むアセンブリをアップロードし、インデックスを作成するプロパティとフィールドを選択するように求めます。 その後、 NCache 新しいエントリを自動的にインデックス化します。 詳細については、 NCache マネージャーと Powershell Add-QueryIndex
コマンドレット、チェック クエリインデックスの構成.
プログラムによるインデックスの作成
プログラムでインデックスを作成するには、オブジェクトのフィールドに注釈を付けてインデックスを付ける必要があります。 NCache があります QueryIndexed
フィールドとプロパティにインデックスを付ける属性。
たとえば、製品名と単価をインデックス化するには、その値に注釈を付ける必要があります Name
& UnitPrice
プロパティ。 このような、
1 2 3 4 5 6 7 8 9 10 11 |
public class Product { public int ID { get; set } [QueryIndexed] public string Name { get; set } [QueryIndexed] public decimal UnitPrice { get; set } public decimal Weight { get; set } } |
デフォルトでは、 NCache 注釈付きプロパティの後にインデックスに名前を付けます。 しかし、別の名前を指定することができます QueryIndexed
属性。 この機能は、インデックスを作成するプロパティに異なる名前を使用する XNUMX つのクライアント アプリケーションを操作する場合に役立ちます。 たとえば、あるアプリケーションが UnitPrice
そして別の、 pricePerUnit
; 私たちは使用することができます price
両方のアプリケーションでインデックス名として使用し、次を使用して SQL のような検索クエリを記述します price
を代わりにお使いください。
個々のプロパティに注釈を付けるのとは別に、クラスに注釈を付けることができます QueryIndexable
属性。 こちらです、 NCache すべてのパブリック プロパティとフィールドに自動的にインデックスを付けます。 しかし、プライベートフィールドにアノテーションを付ける必要があります QueryIndexed
. また、一部のプロパティにインデックスを付けたくない場合は、それらに注釈を付ける必要があります NonQueryIndexed
. すべてのプロパティにインデックスを付ける必要がある場合にのみ、クラスにインデックスを付けましょう。 ただし、インデックスを追加しすぎるとメモリとパフォーマンスのオーバーヘッドが生じるため、検索に必要なプロパティのみをインデックス化するアプローチを採用しましょう。
たとえば、製品のすべてのプロパティにインデックスを付けるには、 Weight
、クラスに注釈を付ける必要があり、 Weight
財産。 このような、
1 2 3 4 5 6 7 8 9 10 11 12 |
[QueryIndexable] public class Product { public int ID { get; set } public string Name { get; set } public decimal UnitPrice { get; set } [NonQueryIndexed] public decimal Weight { get; set } } |
インデックス アノテーションの詳細については、 プログラムでインデックスを定義する.
動的索引付け
を使用して、実行時にキャッシュされたエントリのいくつかの属性を定義します。 NCache クライアント。 これらの属性にインデックスを付けるために注釈を使用することはできません。 ランタイム属性については、 NCache 動的索引付けを使用します。 動的インデックスには、グループ インデックス、タグ インデックス、名前付きタグ インデックスの XNUMX 種類があります。
グループインデックス
グループを使用すると、エントリを論理的に分割して効率を高めることができます。 グループは、論理カテゴリのように機能します。 たとえば、「最も重要な顧客」と「よく購入する製品」にグループを使用できます。 同じグループに属するすべてのエントリを取得して削除できます。 また、グループを使用して SQL のような SELECT クエリを作成できます。 NCache グループを自動的に索引付けします。 存在しないグループにエントリを追加すると、 NCache グループのインデックスを作成し、グループに属するすべてのエントリを同じインデックスに格納します。 グループの詳細については、 グループキャッシュデータ:概要.
タグインデックス
タグは、エントリに関連付ける文字列識別子です。 タグを使用すると、タグに基づいてエントリを取得および削除できるため、データをより適切に整理できます。 グループとは異なり、XNUMX つ以上のタグをキャッシュ エントリに関連付けることができます。 たとえば、「東海岸の顧客」と「西海岸の顧客」をタグとして使用して、場所に基づいて顧客を分類できます。 NCache タグ名または SQL に似たクエリ構文を使用したエントリの検索と削除をサポートしています。 XNUMX つ以上のタグを含むすべてのアイテムを見つけることができます。たとえば、新しいタグごとに、 NCache タグ インデックスを作成し、関連するすべてのキャッシュ アイテムをそのインデックスで保存します。
名前付きタグインデックス
名前付きタグは拡張タグです。 識別子として文字列のみをサポートするグループやタグとは異なり、名前付きタグを使用すると、プリミティブ データ型、文字列、および日付をエントリに関連付けることができます。 名前付きタグは、実行時にエントリに添付されるキーと値のペアのリストです。
たとえば、名前付きタグを使用して、リピーター顧客に提供する割引を保存できます。
タグ名または SQL に似た構文を使用してエントリを検索および削除するには、 NCache 存在しない名前付きタグを持つエントリを追加すると、インデックスが自動的に作成されます。 また、 NCache 関連するすべてのキャッシュ項目をそのインデックスに格納します。 名前付きタグ インデックスは文字列だけでなくすべてのプリミティブ型をサポートするため、より広範なデータ型の項目を検索する代替手段があります。
タグと名前付きタグについては、 タグキャッシュデータ & キャッシュデータを含む名前付きタグ ガイド。
まとめ
インデックスと分散クエリのおかげで、 NCache SQL に似た構文でリアルタイム検索機能を提供します。 インデックスがなければ、 NCache エントリを見つけるには、キャッシュ全体をスキャンする必要があります。 それが理由です NCache 索引が必要です。 最初に、アイテムのすべての検索可能な属性をインデックス化する必要があることを思い出してください。 構成、プログラム、または両方のアプローチを組み合わせて、インデックスを定義できます。 そして、クエリで必要なプロパティのみにインデックスを付けましょう。 インデックスには、メモリとパフォーマンスのコストがあります。
インデックスの作成方法と SQL クエリの動作の詳細については、 インデックス作成ガイド & SQL クエリ: 動作と使用法の概要.