キャッシュ検索を改善するためのインデックス作成
インデックスを使用する目的は、キャッシュ検索に対して関連データを見つける際の速度とパフォーマンスを最適化することです。検索を目的とする場合は、すべての検索可能な属性にインデックスを付ける必要があります。インデックスがないと、検索ですべてのデータがスキャンされるため、かなりの時間と計算能力が必要になります。インデックスを保存するために必要な追加のコンピュータ ストレージと、更新の実行に必要な時間の大幅な増加は、情報検索中に節約される時間と引き換えになります。
NCache 内部では、さまざまなモジュールでインデックス作成を使用して、内部操作のパフォーマンスを向上させます。
キャッシュ検索インデックス
NCache キャッシュ上でのクエリの実行を促進するキャッシュ検索インデックスを提供します。検索の場合、検索可能なすべての属性にインデックスを付けるだけで済みます。 NCache は、キャッシュのパフォーマンスに影響を与える関連データを見つけるためにキャッシュ全体を走査する必要があるため、キャッシュからインデックスのない属性は検索しません。
また、キャッシュされたアイテムの実際のデータ型に対してインデックスが定義されます。インデックス作成を通じて、 NCache は、どのような種類のデータが保存されるかを認識しており、検索可能な方法で保存します。
NCache インデックスを定義するXNUMXつの方法を提供します。
- 事前定義されたインデックス(静的インデックス)
- ランタイムインデックス(動的インデックス)
事前定義されたインデックス(静的インデックス)
Note
この機能は以下でも利用できます NCache Professional.
Note
インデックス作成にはメモリとパフォーマンスのオーバーヘッドがあるため、不要なフィールドのインデックス作成は避けることをお勧めします。
クラスター化キャッシュ内のカスタム クラス オブジェクトを検索するには、そのクラスのクエリ インデックスを事前に定義する必要があります。このようにして、キャッシュはそのデータを簡単にクエリできる形式で保存します。次のようにインデックスを定義できます。 設定プロセス。 インデックスは、パブリック、プライベート、および保護されたプリミティブ データ メンバーに対して構成できます。
Note
インデックスは値型でのみサポートされます。 参照型にはインデックスを作成できません。
インデックスは、キャッシュを開始する前に構成を通じて定義できます。構成を通じて新しいインデックスを定義する場合は、まずキャッシュを停止し、変更を展開するために変更後に再起動する必要があります。その後、キャッシュに追加された関連データには、自動的にインデックスが付けられます。このデータは将来簡単にクエリできるようになります。
警告
参照型をインデックス可能として明示的にマークすると、例外がスローされます。
ランタイムインデックス(動的インデックス)
実行時に定義され使用される属性がアプリケーションにある場合は、実行時インデックス作成を使用する必要があります。たとえば、製品の売上に関連する計算値が製品に割り当てられている場合があります。顧客が製品を購入すると、販売の詳細がキャッシュに保存され、後でキャッシュされた値から販売傾向の日次レポートが生成されます。この値は実行時に定義されるため、製品の実行時属性になります。
NCache は、キャッシュ クライアントによって追加されたデータのインデックスを自動的に作成します。これは、インデックスを実行時属性に使用する前に構成する必要がないことを意味します。
プログラムでインデックスを定義する場合、アプリケーション コードのカスタム属性を使用して、クラスまたはフィールドにインデックス可能のマークを付けることができます。 マークすると、すべてのプリミティブ プロパティとフィールドに自動的にインデックスが付けられます。 すべてのフィールドにインデックスを付ける必要はない場合があるため、それらのフィールドをインデックス付けから除外することもできます。 クラス全体にインデックスを作成するだけでなく、必要なフィールドのみにインデックスを選択的に定義する柔軟性もあります。
実行時インデックスはさらに次のタイプに分類できます。
- グループインデックス
- タグインデックス
- 名前付きタグインデックス
グループインデックス
アイテムはキャッシュ内で次のように分類できます。 グループヘッド. NCache どのグループにもインデックスを付ける必要があるため、グループに基づいてキャッシュ内のデータをクエリできます。キャッシュにまだ存在しないグループにデータが追加されると、そのグループに対して新しいインデックスが作成されます。このグループに属するデータはすべて、検索用に同じインデックスに割り当てられます。
タグインデックス
1 つ以上の識別マークをキャッシュ アイテムに関連付けることができます。この識別マークをタグと呼びます。タグを通じて、ユーザーはキーワードをキャッシュ アイテムに関連付けることができます。タグを指定することによって、キャッシュされたアイテムのコレクションを検索したり、キャッシュから削除したりすることもできます。タグは文字列形式でのみ使用できます。新しいタグごとに、新しいタグ エントリがタグ インデックスに作成され、関連するすべてのキャッシュされたアイテムがそのインデックスに関連付けられます。
名前付きタグインデックス
タグにさまざまなデータ型または名前を付けることができる高レベルのタグ付けを使用する必要があり、特定の種類のタグに関連するデータをクエリすることが要件である場合は、名前付きタグを使用する必要があります。
「名前付きタグ」は、「タグ」を拡張したものです。名前付きタグを使用すると、ユーザーは、文字列として保存されたオブジェクトをクエリするために必要な追加情報(任意のタイプ)を保存できます。たとえば、「最高販売時間」という名前付きタグは、次のようになります。名前付きタグを使用すると、実行時に必要な属性に従ってデータのインデックスを作成でき、後で必要な結果セットを取得するために名前付きタグを使用してクエリを構築できます。複数の名前付きタグを 1 つのキャッシュされたアイテムに関連付けることも、その逆も可能です。
キャッシュに存在しない名前付きタグを使用してデータが追加されると、この新しい名前付きタグに対して新しいインデックスが作成されます。すべての関連データは、検索のためにそのインデックスに割り当てられます。
タグとは異なり、名前付きタグ インデックスはすべてのプリミティブ型、文字列、および日付時刻に対して定義できます。そのため、さまざまなデータ型を含む広範囲の検索可能なデータをより柔軟に追加できます。
同じキャッシュを共有している複数のアプリケーションがあり、それらすべてが名前付きタグを追加することになっている場合は、同じ名前付きタグが同種のデータ型を持つことを確認してください。たとえば、1 つのクライアントが文字列の名前付きタグ「ProductID」を追加している場合です。データ型を指定した場合、他のすべてのクライアントは、同じキャッシュに対して整数などではなく文字列形式で「ProductID」の値を追加する必要があります。
エビクションインデックス
退きはで便利な機能です NCache、キャッシュがいっぱいになると、受信データに対応するために既存のデータを削除することを決定します。このシナリオでは、エビクションにより、構成された割合のデータを削除することでキャッシュ サイズ制限を維持しながら、キャッシュ操作をスムーズに行うことができます。
NCache 立ち退きに関するさまざまなポリシーを提供します。これらのポリシーは、キャッシュがいっぱいになったときにどのデータを削除するかを決定します。 NCache 立ち退きのための次のポリシーを提供します。
- 優先度ベースのエビクション
Note
この機能は以下でも利用できます NCache Professional.
優先順位ベースのエビクションの場合、インデックスは高優先度から低優先度に保持され、キャッシュがいっぱいになると、エビクション スレッドはインデックスから優先度の低いキーを選択し、キャッシュからそれらをエビクトします。
- 最近使用されていない(LRU)
最も最近使用されていない (LRU) の場合、エビクション インデックスはキーが使用されている間保持され、キャッシュがいっぱいになると、エビクション スレッドはインデックスから最も最近使用されていないキーを選択し、キャッシュから削除します。
- 使用頻度が最も低い(LFU)
最低使用頻度 (LFU) の場合、エビクション インデックスはキーの使用回数分保持され、キャッシュがいっぱいになると、エビクション スレッドはインデックスから最も使用頻度の低いキーを選択し、キャッシュからそれらをエビクションします。
Note
Evictionを実行するために、 NCache エビクション用のキャッシュ データのエビクションのインデックスを保持します。
有効期限インデックス
有効期限は、キャッシュされる各アイテムに付加されるプロパティです。このプロパティは各キャッシュ オブジェクトがその経過時間に応じて評価できるように、各オブジェクトに付加されます。オブジェクトのこの経過時間によって有効期限が決まります。 時間。その有効期限オブジェクトが無効になると、関連付けられた項目がキャッシュから削除されます。
NCache 保持します DateTime
有効期限インデックス キャッシュキーを期限切れ時に効率的に削除するために使用します。 有効期限マネージャーは、クリーン間隔の後にアイテムを期限切れにします。
クリーンインターバル 期限切れのアイテムがキャッシュから削除されるまでの定期的な間隔です。 キャッシュのクリーン間隔は構成設定で変更できます。
クリーン間隔が経過すると、有効期限マネージャーがインデックスからキーを取得し、期限切れのアイテムがキャッシュから削除されます。期限切れのアイテムをキャッシュから削除した後、期限切れスレッドはキャッシュ構成で指定された「クリーン間隔期間」の間スリープします。 NCache では、「データ無効化戦略」で説明されている XNUMX 種類の有効期限を提供します。
- 絶対有効期限
- スライド式の有効期限