6.10. SQL キャッシュストア
SQL キャッシュストアを使用すると、既存のデータベーステーブルから Data Grid キャッシュを読み込むことができます。Data Grid は、2 種類の SQL キャッシュストアを提供します。
- テーブル
- Data Grid は、1 つのデータベーステーブルからエントリーを読み込みます。
- クエリー
- Data Grid は SQL クエリーを使用して、単一または複数のデータベーステーブルからエントリーを読み込み (これらのテーブルのサブ列からの読み込みを含む)、挿入、更新、および削除操作を実行します。
コードチュートリアルにアクセスして、SQL キャッシュストアの動作を試します。Persistence code tutorial with remote caches を参照してください。
SQL テーブルとクエリーストアの両方は以下のようになります。
- 永続ストレージに対する読み取りおよび書き込み操作を許可します。
- 読み取り専用で、キャッシュローダーとして機能します。
単一のデータベース列または複数のデータベース列の複合に対応するキーと値をサポートします。
複合キーと値の場合は、キーと値を記述する Protobuf スキーマ (
.protoファイル) で Data Grid を指定する必要があります。Data Grid Server を使用すると、schema コマンドを使用して、Data Grid Console または Command Line Interface(CLI) からschemaを追加できます。
SQL キャッシュストアは、既存のデータベーステーブルで使用することを目的としています。したがって、有効期限、セグメント、バージョン管理メタデータなどのメタデータは保存されません。バージョンストレージがないため、SQL ストアは楽観的トランザクションキャッシュと非同期クロスサイトレプリケーションをサポートしません。この制限は、Hot Rod のバージョン管理された操作にも適用されます。
SQL キャッシュストアが読み取り専用として設定されている場合は、SQL キャッシュストアとともに有効期限を使用します。有効期限により、古い値がメモリーから削除され、キャッシュがデータベースから値を再度取得し、新たにキャッシュします。
6.10.1. キーおよび値のデータ型 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、適切なデータ型を使用して、SQL キャッシュストアを介してデータベーステーブルの列からキーと値を読み込みます。以下の CREATE ステートメントは、isbn と title の 2 つの列が含まれる books という名前のテーブルを追加します。
2 列のデータベーステーブル
CREATE TABLE books (
isbn NUMBER(13),
title varchar(120)
PRIMARY KEY(isbn)
);
CREATE TABLE books (
isbn NUMBER(13),
title varchar(120)
PRIMARY KEY(isbn)
);
SQL キャッシュストアでこのテーブルを使用すると、Data Grid は isbn 列をキーとして、title 列を値として使用してキャッシュに追加します。
6.10.1.1. 複合キーと値 リンクのコピーリンクがクリップボードにコピーされました!
複合プライマリーキーまたは複合値を含むデータベーステーブルで SQL ストアを使用できます。
複合キーまたは値を使用するには、データ型を記述する Protobuf スキーマで Data Grid を指定する必要があります。また、SQL ストアに schema 設定を追加し、キーと値のメッセージ名を指定する必要があります。
Data Grid は、ProtoStream プロセッサーで Protobuf スキーマを生成することを推奨します。次に、Data Grid コンソール、CLI、または REST API を使用してリモートキャッシュの Protobuf スキーマをアップロードできます。
複合値
以下のデータベーステーブルは、title および author 列の複合値を保持します。
Data Grid は、isbn 列をキーとして使用してキャッシュにエントリーを追加します。値の場合、Data Grid には title 列と author 列をマッピングする Protobuf スキーマが必要です。
複合キーと値
以下のデータベーステーブルは複合プライマリーキーと複合値を保持し、それぞれに 2 列があります。
キーと値の両方で、Data Grid には列をキーと値にマッピングする Protobuf スキーマが必要です。
6.10.1.2. 埋め込みキー リンクのコピーリンクがクリップボードにコピーされました!
以下の例のように、Protobuf スキーマは値の中にキーを含めることができます。
組み込みキーを使用した Protobuf スキーマ
埋め込みキーを使用するには、SQL ストア設定に embedded-key="true" 属性または embeddedKey(true) メソッドを含める必要があります。
6.10.1.3. SQL から Protobuf タイプへ リンクのコピーリンクがクリップボードにコピーされました!
以下の表に、SQL データ型のデフォルトを Protobuf データ型にマッピングしています。
| SQL 型 | Protobuf タイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6.10.2. データベーステーブルからの Data Grid キャッシュの読み込み リンクのコピーリンクがクリップボードにコピーされました!
Data Grid にデータベーステーブルからデータを読み込ませる場合は、SQL テーブルキャッシュストアを設定に追加します。データベースに接続すると、Data Grid はテーブルからメタデータを使用して列名とデータタイプを検出します。また、Data Grid は、データベースのどの列がプライマリーキーの一部であるかを自動的に決定します。
前提条件
-
JDBC 接続の詳細を把握している。
JDBC 接続ファクトリーを直接キャッシュ設定に追加できます。
実稼働環境でのリモートキャッシュでは、マネージドデータソースを Data Grid Server 設定に追加し、キャッシュ設定で JNDI 名を指定する必要があります。 複合キーまたは複合値の Protobuf スキーマを生成し、スキーマを Data Grid に登録します。
ヒントData Grid は、ProtoStream プロセッサーで Protobuf スキーマを生成することを推奨します。リモートキャッシュでは、Data Grid コンソール、CLI、または REST API を使用してスキーマを追加して、スキーマを登録できます。
手順
データベースドライバーを Data Grid デプロイメントに追加します。
リモートキャッシュ: データベースドライバーを、Data Grid Server インストールの
server/libディレクトリーにコピーします。ヒントData Grid コマンドラインインターフェイス (CLI) で
installコマンドを使用して、必要なドライバーをserver/libディレクトリーにダウンロードします。以下に例を示します。install org.postgresql:postgresql:42.4.3
install org.postgresql:postgresql:42.4.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 組み込みキャッシュ:
infinispan-cachestore-sql依存関係をpomファイルに追加します。<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-sql</artifactId> </dependency>
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-sql</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Data Grid 設定を開いて編集します。
SQL テーブルキャッシュストアを追加します。
宣言的
table-jdbc-store xmlns="urn:infinispan:config:store:sql:14.0"
table-jdbc-store xmlns="urn:infinispan:config:store:sql:14.0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow プログラマティック
persistence().addStore(TableJdbcStoreConfigurationBuilder.class)
persistence().addStore(TableJdbcStoreConfigurationBuilder.class)Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
データベースダイアレクトを
dialect=""またはdialect()のいずれかで指定します (例:dialect="H2"またはdialect="postgres")。 以下のように、必要なプロパティーで SQL キャッシュストアを設定します。
-
クラスター全体で同じキャッシュストアを使用するには、
shared="true"またはshared(true)を設定します。 -
読み取り専用のキャッシュストアを作成するには、
read-only="true"または.ignoreModifications(true)を設定します。
-
クラスター全体で同じキャッシュストアを使用するには、
-
table-name="<database_table_name>"またはtable.name("<database_table_name>")を使用して、キャッシュを読み込むデータベーステーブルに名前を付けます。 schema要素または.schemaJdbcConfigurationBuilder()メソッドを追加し、複合キーまたは値の Protobuf スキーマ設定を追加します。-
package属性またはpackage()メソッドを使用してパッケージ名を指定します。 -
message-name属性またはmessageName()メソッドを使用して複合値を指定します。 -
key-message-name属性またはkeyMessageName()メソッドを使用して複合キーを指定します。 -
スキーマで値内にキーが含まれている場合は、
embedded-key属性またはembeddedKey()メソッドにtrueの値を設定します。
-
- 変更を設定に保存します。
SQL テーブルストアの設定
以下の例では、Protobuf スキーマで定義された複合値を使用して、books という名前のデータベーステーブルから分散キャッシュを読み込みます。
XML
JSON
YAML
ConfigurationBuilder
6.10.3. SQL クエリーを使用したデータのロードおよび操作の実行 リンクのコピーリンクがクリップボードにコピーされました!
SQL クエリーキャッシュストアを使用すると、データベーステーブルのサブ列からなど、複数のデータベーステーブルからキャッシュを読み込み、挿入、更新、および削除操作を実行することができます。
前提条件
-
JDBC 接続の詳細を把握している。
JDBC 接続ファクトリーを直接キャッシュ設定に追加できます。
実稼働環境でのリモートキャッシュでは、マネージドデータソースを Data Grid Server 設定に追加し、キャッシュ設定で JNDI 名を指定する必要があります。 複合キーまたは複合値の Protobuf スキーマを生成し、スキーマを Data Grid に登録します。
ヒントData Grid は、ProtoStream プロセッサーで Protobuf スキーマを生成することを推奨します。リモートキャッシュでは、Data Grid コンソール、CLI、または REST API を使用してスキーマを追加して、スキーマを登録できます。
手順
データベースドライバーを Data Grid デプロイメントに追加します。
リモートキャッシュ: データベースドライバーを、Data Grid Server インストールの
server/libディレクトリーにコピーします。ヒントData Grid コマンドラインインターフェイス (CLI) で
installコマンドを使用して、必要なドライバーをserver/libディレクトリーにダウンロードします。以下に例を示します。install org.postgresql:postgresql:42.4.3
install org.postgresql:postgresql:42.4.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 組み込みキャッシュ:
infinispan-cachestore-sql依存関係をpomファイルに追加し、データベースドライバーがアプリケーションクラスパス上にあることを確認します。<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-sql</artifactId> </dependency>
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-sql</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- Data Grid 設定を開いて編集します。
SQL クエリーキャッシュストアを追加します。
宣言的
query-jdbc-store xmlns="urn:infinispan:config:store:sql:14.0"
query-jdbc-store xmlns="urn:infinispan:config:store:sql:14.0"Copy to Clipboard Copied! Toggle word wrap Toggle overflow プログラマティック
persistence().addStore(QueriesJdbcStoreConfigurationBuilder.class)
persistence().addStore(QueriesJdbcStoreConfigurationBuilder.class)Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
データベースダイアレクトを
dialect=""またはdialect()のいずれかで指定します (例:dialect="H2"またはdialect="postgres")。 以下のように、必要なプロパティーで SQL キャッシュストアを設定します。
-
クラスター全体で同じキャッシュストアを使用するには、
shared="true"またはshared(true)を設定します。 -
読み取り専用のキャッシュストアを作成するには、
read-only="true"または.ignoreModifications(true)を設定します。
-
クラスター全体で同じキャッシュストアを使用するには、
データでキャッシュを読み込み、
queries要素またはqueries()メソッドでデータベーステーブルを変更する SQL クエリーステートメントを定義します。Expand クエリーステートメント 説明 SELECT単一のエントリーをキャッシュに読み込みます。ワイルドカードを使用できますが、キーのパラメーターを指定する必要があります。ラベル付きの式を使用できます。
SELECT ALL複数のエントリーをキャッシュに読み込みます。返された列の数がキーと値の列数と一致する場合は、
*ワイルドカードを使用できます。ラベル付きの式を使用できます。SIZEキャッシュ内のエントリー数をカウントします。
DELETEキャッシュからエントリーを 1 つ削除します。
DELETE ALLキャッシュからすべてのエントリーを削除します。
UPSERTキャッシュのエントリーを修正します。
注記DELETE、DELETE ALL、およびUPSERTステートメントは読み取り専用キャッシュストアには適用されませんが、キャッシュストアが変更を許可する場合は必要です。DELETEステートメントのパラメーターは、SELECTステートメントのパラメーターに完全に一致する必要があります。UPSERTステートメントの変数には、SELECTおよびSELECT ALLステートメントが返すものと同じ数の一意に名前が付けられた変数が必要です。たとえば、SELECTがfooとbarを返す場合、このステートメントは変数として:fooおよび:barのみを取る必要があります。ただし、ステートメントに同じ名前の変数を複数回適用することができます。SQL クエリーには、
JOIN、ONおよびデータベースがサポートするその他の句を含めることができます。schema要素または.schemaJdbcConfigurationBuilder()メソッドを追加し、複合キーまたは値の Protobuf スキーマ設定を追加します。-
package属性またはpackage()メソッドを使用してパッケージ名を指定します。 -
message-name属性またはmessageName()メソッドを使用して複合値を指定します。 -
key-message-name属性またはkeyMessageName()メソッドを使用して複合キーを指定します。 -
スキーマで値内にキーが含まれている場合は、
embedded-key属性またはembeddedKey()メソッドにtrueの値を設定します。
-
- 変更を設定に保存します。
6.10.3.1. SQL クエリーストアの設定 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、person と address の 2 つのデータベーステーブルのデータを含む分散キャッシュを読み込む SQL クエリーキャッシュストアの設定例を説明します。
SQL ステートメント
次の例は、"person" テーブルと "address" テーブルの SQL データ定義言語 (DDL) ステートメントを示しています。例で説明されているデータ型は、PostgreSQL データベースに対してのみ有効です。
person テーブルの SQL ステートメント
address テーブルの SQL ステートメント
Protobuf スキーマ
person および address テーブルの Protobuf スキーマは以下のとおりです。
address テーブルの Protobuf スキーマ
person テーブルの Protobuf スキーマ
キャッシュ設定
以下の例では、JOIN 句を含む SQL クエリーを使用して、person テーブルおよび address テーブルから分散キャッシュを読み込みます。
XML
JSON
YAML
ConfigurationBuilder
6.10.4. SQL キャッシュストアに関するトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
SQL キャッシュストアに関する一般的な問題およびエラーと、そのトラブルシューティング方法を確認してください。
ISPN008064: No primary keys found for table <table_name>, check case sensitivity
ISPN008064: No primary keys found for table <table_name>, check case sensitivity
Data Grid は、以下の場合にこのメッセージをログに記録します。
- データベーステーブルが存在しない。
- データベーステーブル名は大文字と小文字が区別され、データベースプロバイダーに応じて、すべての小文字またはすべての大文字のいずれかである必要があります。
- データベーステーブルにプライマリーキーが定義されていない。
この問題を解決するには、以下を行う必要があります。
- SQL キャッシュストア設定を確認し、既存のテーブルの名前を指定するようにしてください。
- データベーステーブル名が大文字/小文字の要件に準拠することを確認します。
- データベーステーブルに、適切な行を一意に識別するプライマリーキーがあることを確認します。