11.2.2. インデックス化
Red Hat Data Grid でのインデックス作成はキャッシュごとに行われ、デフォルトではキャッシュはインデックス化されません。インデックスの有効化は必須ではありませんが、インデックスを使用するクエリーにはパフォーマンスが非常に高くなります。一方、インデックスを有効にすると、クラスターの書き込みスループットに悪影響を及ぼす可能性があるため、キャッシュの種類やユースケースに応じてこの影響を最小限に抑えるために、一部のストラテジーの クエリーパフォーマンスガイド を確認してください。
11.2.2.1. 設定 リンクのコピーリンクがクリップボードにコピーされました!
11.2.2.1.1. 一般的な形式 リンクのコピーリンクがクリップボードにコピーされました!
XML でインデックスを有効にするには、<indexing> 要素と インデックス ( インデックス モード)をキャッシュ設定に追加し、必要に応じて追加のプロパティーを指定する必要があります。
プログラムによる:
import org.infinispan.configuration.cache.*;
ConfigurationBuilder cacheCfg = ...
cacheCfg.indexing().index(Index.ALL)
.addProperty("property name", "propery value")
import org.infinispan.configuration.cache.*;
ConfigurationBuilder cacheCfg = ...
cacheCfg.indexing().index(Index.ALL)
.addProperty("property name", "propery value")
11.2.2.1.2. インデックス名 リンクのコピーリンクがクリップボードにコピーされました!
index 要素内の各プロパティーの前にインデックス名が付けられ、org.infinispan.sample.Car という名前 のインデックスは local-heap です。
cacheCfg.indexing()
.index(Index.ALL)
.addProperty("org.infinispan.sample.Car.directory_provider", "local-heap")
cacheCfg.indexing()
.index(Index.ALL)
.addProperty("org.infinispan.sample.Car.directory_provider", "local-heap")
Red Hat Data Grid は、キャッシュに存在する各エンティティーのインデックスを作成し、これらのインデックスを個別に設定できます。@Indexed アノテーションが付けられたクラスの場合、インデックス名はアノテーションの name 引数で上書きされない限り、完全修飾クラス 名 になります。
以下のスニペットでは、すべてのエンティティーのデフォルトストレージは infinispan ですが、Boat インスタンスは boatIndex という名前のインデックスの local-heap に保存されます。空プレーン エンティティーは local-heap にも保存されます。その他のエンティティーのインデックスは、デフォルト で接頭辞が付けられたプロパティーで設定されます。
11.2.2.1.3. インデックス化されたエンティティーの指定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Data Grid は、キャッシュ内の異なるエンティティータイプのインデックスを自動的に認識および管理できます。Red Hat Data Grid の今後のバージョンではこの機能が削除されるため、インデックス化されるタイプを事前に宣言することが推奨されます(完全修飾クラス名でリストされます)。これは、xml で行うことができます。
プログラムを使用する場合
cacheCfg.indexing()
.index(Index.ALL)
.addIndexedEntity(Car.class)
.addIndexedEntity(Truck.class)
cacheCfg.indexing()
.index(Index.ALL)
.addIndexedEntity(Car.class)
.addIndexedEntity(Truck.class)
サーバーモードでは、'indexed-entities' 要素の下に一覧表示されるクラス名は、JBoss Modules モジュール識別子、スロット名、および完全修飾クラス名で構成される 'extended' クラス名形式を使用する必要があります。これらの 3 つのコンポーネントは、':' 文字によって区切られます(例: "com.acme.my-module-with-entity-classes:my-slot:com.acme.query.test.Car")。エンティティークラスは、参照されるモジュールに置く必要があります。これは、サーバーの 'modules' フォルダーにデプロイされるユーザー提供モジュールか、'deployments' フォルダーにデプロイされるプレーン jar のいずれかになります。問題のモジュールはキャッシュの自動依存関係となるため、最終的に再デプロイするとキャッシュが再起動されます。
サーバーに対してのみ、'extended' クラス名の使用要件をフォローできず、プレーンクラス名を使用すると、誤った ClassLoader が使用されているためクラスがないために解決に失敗します(Red Hat Data Grid の内部クラスパスが使用されている)。