4.2. クエリー API

Data Grid 8 は、より使いやすく、より軽量なデザインの更新された Query API をもたらします。Data Grid 7.x と比較して、分散キャッシュ内の値全体を検索すると、より効率的なクエリーパフォーマンスが得られ、より良い結果が得られます。

注記

Data Grid 8 Query API はかなりのリファクタリングを経ているため、現在非推奨となっているいくつかの機能と機能リソースがあります。

このトピックでは、以前のバージョンから移行するときに設定に加える必要のある変更に焦点を当てます。これらの変更には、廃止されたすべてのインターフェイス、メソッド、またはその他の設定を削除する計画を含める必要があります。

非推奨の機能の完全なリストについては、Data Grid の非推奨と削除 (Red Hat ナレッジベース) を参照してください。

Data Grid キャッシュのインデックス作成

Data Grid Lucene Directory、InfinispanIndexManager および AffinityIndexManager インデックスマネージャー、および Hibernate Search 用の Infinispan Directory プロバイダーは、8.0 で非推奨になり、8.1 で削除されました。

auto-config 属性は 8.1 で非推奨になり、削除される予定です。

インデックスモード設定を設定する index() メソッドは非推奨になりました。設定でインデックス作成を有効にすると、Data Grid はインデックス作成を管理するための最良の方法を自動的に選択します。

重要

いくつかのインデックス設定値はサポートされなくなり、それらを含めると致命的な設定エラーが発生します。

設定に次の変更を加える必要があります。

  • .indexing().index(Index.NONE)indexing().enabled(false) に変更
  • 他のすべての列挙値を次のように変更します。indexing().enabled(true)

宣言的に、設定に他のインデックス設定要素が含まれている場合は、enabled="true" を指定する必要はありません。ただし、プログラムでインデックスを設定する場合は、enabled() メソッドを呼び出す必要があります。同様に、JSON 形式のデータグリッド設定では、インデックスを明示的に有効にする必要があります。次に例を示します。

"indexing": {
      "enabled": "true"
      ...
      },

インデックス付きタイプ

インデックス設定ですべてのインデックス付きタイプを宣言する必要があります。宣言されていないタイプがインデックス付きキャッシュで使用される場合、Data Grid は警告メッセージをログに記録します。この要件は、Java クラスと Protobuf タイプの両方に適用されます。

Data Grid 8 でのインデックス作成の有効化
  • 宣言的に

    <distributed-cache name="my-cache">
       <indexing>
         <indexed-entities>
           <indexed-entity>com.acme.query.test.Car</indexed-entity>
           <indexed-entity>com.acme.query.test.Truck</indexed-entity>
         </indexed-entities>
       </indexing>
    </distributed-cache>
  • プログラムで

    import org.infinispan.configuration.cache.*;
    
    ConfigurationBuilder config=new ConfigurationBuilder();
    config.indexing().enable().addIndexedEntity(Car.class).addIndexedEntity(Truck.class);

Querying values in caches

org.infinispan.query.SearchManager インターフェイスは Data Grid 8 で非推奨になり、Lucene および HibernateSearch のネイティブオブジェクトをサポートしなくなりました。

削除されたメソッド

  • Lucene クエリーを受け取る .getQuery() メソッド。代わりに、org.infinispan.query.Search エントリーポイントから Ickle クエリーを取得する別のメソッドを使用してください。

    同様に、.getQuery() の呼び出し時に、複数のターゲットエンティティークラスを指定できなくなりました。Ickle クエリー文字列は、代わりにエンティティーを提供します。

  • Hibernate Search クエリーを直接構築する .buildQueryBuilderForClass()。代わりに Ickle クエリーを使用してください。

org.infinispan.query.CacheQuery インターフェイスも非推奨になりました。代わりに、org.infinispan.query.dsl.Query インターフェイスを Search.getQueryFactory() メソッドから取得する必要があります。

org.infinispan.query.dsl.Query のインスタンスはクエリー結果をキャッシュしなくなり、list() などのメソッドを呼び出すときにクエリーを再実行することができることに注意してください。

エンティティーマッピング

今後は、すべての場合において、@SortableField で並べ替えが必要なフィールドにアノテーションを付ける必要があります。

4.2.1. 8.2 での Query API の変更

Data Grid は、Hibernate および Apache Lucene ライブラリーをアップグレードして、Query API のパフォーマンスおよび機能を改善します。このアップグレードの一環として、Data Grid は新しいインデックス作成機能を導入し、いくつかの Hibernate および Lucene アノテーションを削除します。

クエリーの統計

Data Grid 8.2 は、以下のようにキャッシュ設定で統計を宣言的に有効にした場合にのみ、クエリーおよびインデックスの統計を公開します。

<replicated-cache name="myReplicatedCache" statistics="true">
  <!-- Cache configuration goes here. -->
</replicated-cache>

JMX 経由でのクエリーおよびインデックスの統計を有効にすることはできなくなりました。

Data Grid キャッシュのインデックス作成

インデックス型の宣言

Data Grid 8.1 では、インデックス設定で宣言されていないタイプが許可されていました。Data Grid 8.2 以降、設定ですべてのインデックス付きタイプを宣言する必要があります。この要件は、Java クラスと Protobuf タイプの両方に適用されます。インデックス付きタイプの宣言の詳細については、8.1 移行の詳細を参照してください。

インデックスマネージャー

Data Grid 8.2 は、デフォルトのインデックスマネージャーとして near-real-time を使用し、設定を必要としなくなりました。

  • Data Grid 8.1:

    <indexing>
      <property name="default.indexmanager">near-real-time</property>
    </indexing>
  • Data Grid 8.2:

    <indexing enabled="true"/>
インデックスリーダーおよびライター

Data Grid 8.2 では、インデックスを作成するための内部コンポーネントであるインデックスリーダーとインデックスライターが導入されています。

設定を適応させるには、次のことを行う必要があります。

  1. property 要素または .addProperty() メソッドを使用するインデックス設定を削除します。
  2. 次のいずれかの方法でインデックス作成動作を設定します。

    • 宣言的: <index-reader> および <index-writer> 要素を追加します。
    • プログラム: builder.indexing().reader()builder.indexing().writer() メソッドを追加します。

リーダーの更新

8.2 で追加された refresh-interval 属性を使用して、インデックスリーダーの更新期間を設定します。

  • Data Grid 8.1:

    <indexing>
      <property name="default.reader.async_refresh_period_ms">1000</property>
    </indexing>
  • Data Grid 8.2:

    <indexing>
      <index-reader refresh-interval="1000"/>
    </indexing>

ライターのコミット間隔

8.2 で追加された commit-interval 属性を使用して、インデックスライターがインデックスストレージにコミットする間隔を設定します。Data Grid 8.2 では、インデックス作成はデフォルトで非同期であり、default.worker.execution プロパティーは使用されなくなりました。

  • Data Grid 8.1:

    <indexing>
       <property name="default.worker.execution">async</property>
       <property name="default.index_flush_interval">500</property>
    </indexing>
  • Data Grid 8.2:

    <indexing>
       <index-writer commit-interval="500"/>
    </indexing>

Lucene インデックスチューニングプロパティー

Data Grid 8.2 は、ram-buffer-size 属性と、インデックスを調整するためのプロパティーを置き換える factor 属性と max-size 属性を持つ index-merge 要素を追加します。

  • Data Grid 8.1:

    <indexing>
       <property name="default.indexwriter.merge_factor">30</property>
       <property name="default.indexwriter.merge_max_size">1024</property>
       <property name="default.indexwriter.ram_buffer_size">256</property>
    </indexing>
  • Data Grid 8.2:

    <indexing>
       <index-writer ram-buffer-size="256">
           <index-merge factor="30" max-size="1024"/>
       </index-writer>
    </indexing>
インデックスストレージ

Data Grid 8.2 には、以前のバージョンの property 要素設定を置き換える storage 属性が含まれています。storage 属性を使用すると、インデックスを JVM ヒープに格納するかホストファイルシステムに格納するかを設定できます。

ファイルシステムストレージ

  • Data Grid 8.1:

    <indexing>
      <property name="default.directory_provider">filesystem</property>
      <property name="default.indexBase">${java.io.tmpdir}/baseDir</property>
    </indexing>
  • Data Grid 8.2:

    <indexing storage="filesystem" path="${java.io.tmpdir}/baseDir"/>

JVM ヒープストレージ

  • Data Grid 8.1:

    <indexing>
     <property name="default.directory_provider">local-heap</property>
    </indexing>
  • Data Grid 8.2:

    <indexing storage="local-heap">
    </indexing>
インデックスプロパティーの適応

インデックス設定を DataGrid 8.2 に移行するときは、次の変更も行う必要があります。

  • lucene_version プロパティーを削除します。

    重要

    Data Grid 8.2 で古い Lucene バージョンで作成したインデックスを使用しないでください。

    インデックス設定を調整した後、Data Grid を初めて起動するときにインデックスを再構築して、Data Grid 8.2 への移行を完了する必要があります。

  • default.sharding_strategy.nbr_of_shards プロパティーを削除します。
    このプロパティーは、置き換えなしで非推奨になりました。
  • infinispan.query.lucene.max-boolean-clauses プロパティーを削除します。
    Data Grid 8.2 以降、これを JVM プロパティーとして設定する必要があります。
Hibernate および Lucene アノテーション

@Field@Indexed@SortableField などの Hibernate および Lucene アノテーションの移行については、Hibernate Search Migration GuideAnnotation mapping セクションを参照してください。

4.2.2. 8.3 での Query API の変更

Data Grid 8.3 は IndexedQueryMode パラメーターを削除します。Data Grid は、キャッシュのクエリーに最適なモードを自動的に検出し、以前のバージョンでは任意のパラメーターを無視していました。