第15章 JDBC ベースのキャッシュストア


Red Hat JBoss Data Grid は、一般的なデータストレージ形式と共に使用される複数のキャッシュストアを提供します。JDBC ベースのキャッシュストアは、JDBC ドライバーを公開するキャッシュストアと共に使用されます。JBoss Data Grid は、永続化されるキーに応じて以下の JDBC ベースのキャッシュストアを提供します。
  • JdbcBinaryStore
  • JdbcStringBasedStore
  • JdbcMixedStore

15.1. JdbcBinaryStores

JdbcBinaryStore はすべてのキータイプをサポートします。同じテーブル行/Blob の同じハッシュ値 (キー上の hashCode メソッド) を持つすべてのキーを格納します。組み込まれるキーに共通するハッシュ値が、テーブルの行/Blob の主キーとして設定されます。このハッシュ値により、JdbcBinaryStore は大変優れた柔軟性を提供しますが、これにより平行性とスループットのレベルが下がります。
たとえば、3 つのキー (k1k2k3) のハッシュコードが同じである場合、同じテーブル行に格納されます。3 つの異なるスレッドが k1k2k3 を同時に更新しようとすると、すべてのキーが同じ行を共有するため同時には更新できないことから、順次更新する必要があります。

15.1.1. JdbcBinaryStore の設定 (リモートクライアントサーバーモード)

以下は、Red Hat JBoss Data Grid のリモートクライアントサーバーモードを使用し、パッシベーションを有効にした JdbcBinaryStore の設定です。

手順15.1 リモートクライアントサーバーノード用に JdbcBinaryStore を設定します。

  1. binary-keyed-jdbc-store 要素

    binary-keyed-jdbc-store 要素は、バイナリのキーボードから情報が入力されたキャッシュの JDBC ストアに対する設定を指定します。
    1. datasource パラメーターはデータソースの JNDI 名を定義します。
    2. passivation パラメーターは、キャッシュのエントリーがパッシベートされるか (true) またはキャッシュストアが内容のコピーをメモリーに保持するか (false) を決定します。
    3. preload パラメーターは、起動中にエントリーをキャッシュにロードするかどうかを指定します。このパラメーターの有効な値は truefalse です。
    4. purge パラメーターは、起動時にキャッスストアがパージされるかどうかを指定します。 このパラメーターの有効な値は truefalse です。
    <local-cache>
    	...
    	<binary-keyed-jdbc-store datasource="java:jboss/datasources/JdbcDS" 
    				 passivation="${true/false}" 
    				 preload="${true/false]" 
    				 purge="${true/false}">
    
    Copy to Clipboard Toggle word wrap
  2. binary-keyed-table 要素

    binary-keyed-table 要素は、バイナリーのキャッシュエントリーを格納するために使用されるデータベーステーブルに関する情報を指定します。
    1. prefix パラメーターはデータベーステーブル名のプレフィックスの文字列を指定します。
    <local-cache>
    	...
    	<binary-keyed-jdbc-store datasource="java:jboss/datasources/JdbcDS" 
    				 passivation="${true/false}" 
    				 preload="${true/false]" 
    				 purge="${true/false}">
                   	<binary-keyed-table prefix="JDG">
    
    Copy to Clipboard Toggle word wrap
  3. id-column 要素

    id-column 要素は、キャッシュエントリーの ID を保持するデータベース列に関する情報を指定します。
    1. name パラメーターはデータベース列の名前を指定します。
    2. type パラメーターはデータベース列のタイプを指定します。
    <local-cache>
    	...
    	<binary-keyed-jdbc-store datasource="java:jboss/datasources/JdbcDS" 
    				 passivation="${true/false}" 
    				 preload="${true/false]" 
    				 purge="${true/false}">
                   	<binary-keyed-table prefix="JDG">
                   		<id-column name="id" 
    				   type="${id.column.type}"/>
    
    Copy to Clipboard Toggle word wrap
  4. data-column 要素

    data-column 要素には、キャッシュエントリーデータを保持するデータベース列に関する情報が含まれます。
    1. name パラメーターはデータベース列の名前を指定します。
    2. type パラメーターはデータベース列のタイプを指定します。
    <local-cache>
    	...
    	<binary-keyed-jdbc-store datasource="java:jboss/datasources/JdbcDS" 
    				 passivation="${true/false}" 
    				 preload="${true/false]" 
    				 purge="${true/false}">
                   	<binary-keyed-table prefix="JDG">
                   		<id-column name="id" 
    				   type="${id.column.type}"/>
                   		<data-column name="datum" 
    				     type="${data.column.type}"/>
    
    Copy to Clipboard Toggle word wrap
  5. timestamp-column 要素

    timestamp-column 要素は、キャッシュエントリーのタイムスタンプを保持するデータベース列に関する情報を指定します。
    1. name パラメーターはデータベース列の名前を指定します。
    2. type パラメーターはデータベース列のタイプを指定します。
    <local-cache>
    	...
    	<binary-keyed-jdbc-store datasource="java:jboss/datasources/JdbcDS" 
    				 passivation="${true/false}" 
    				 preload="${true/false]" 
    				 purge="${true/false}">
                   	<binary-keyed-table prefix="JDG">
                   		<id-column name="id" 
    				   type="${id.column.type}"/>
                   		<data-column name="datum" 
    				     type="${data.column.type}"/>
                  		<timestamp-column name="version" 
    					  type="${timestamp.column.type}"/>
                  	</binary-keyed-table>
           	</binary-keyed-jdbc-store>
    </local-cache>
    
    
    Copy to Clipboard Toggle word wrap

15.1.2. JdbcBinaryStore の設定 (ライブラリーモード)

以下は、JdbcBinaryStore の設定例です。

手順15.2 ライブラリーモードの JdbcBinaryStore の設定

  1. binaryKeyedJdbcStore 要素

    binaryKeyedJdbcStore 要素は、キャッシュストアを設定するための次のパラメーターを使用します。
    1. fetchPersistentState パラメーターは、クラスターへ参加する時に永続状態が取り込まれるかを決定します。クラスター環境でレプリケーションとインバリデーションを使用している場合は、これを true に設定します。さらに、複数のキャッシュストアがチェーンされている場合、1 つのキャッシュストアのみがこのプロパティーを有効に設定できます。共有キャッシュストアが使用されている場合、キャッシュは、このプロパティーが true に設定されているにも関わらず、永続状態の転送を許可しません。fetchPersistentState パラメーターはデフォルトでは false に設定されます。
    2. ignoreModifications パラメーターは、キャッシュを変更する操作 (例: 配置、削除、消去、保存など) がキャッシュストアに影響を与えるかどうかを決定します。結果として、キャッシュストアは、キャッシュと同期しなくなります。
    3. purgeOnStartup パラメーターは、初回起動時にキャッシュがパージされるかどうかを指定します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    
    Copy to Clipboard Toggle word wrap
  2. connectionPool 要素

    connectionPool 要素は、次のパラメーターを使用して JDBC ドライバーの接続プールを指定します。
    1. connectionUrl パラメーターは、JDBC ドライバー固有の接続 URL を指定します。
    2. username パラメーターには、connectionUrl 経由で接続するために使用されるユーザー名が含まれます。
    3. driverClass パラメーターは、データベースに接続するために使用されるドライバーのクラス名を指定します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    		<connectionPool connectionUrl="jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1" 
    				username="sa" 
    				driverClass="org.h2.Driver"/>
    
    Copy to Clipboard Toggle word wrap
  3. binaryKeyedTable 要素

    binaryKeyedTable 要素は、キャッシュエントリーを保存するテーブルを定義します。これは、キャッシュストアを設定するために以下のパラメーターを使用します。
    1. dropOnExit パラメーターは、シャットダウン時にデータベーステーブルがドロップされるかどうかを指定します。
    2. createOnStart パラメーターは、スタートアップ時にストアによってデータベーステーブルが作成されるかどうかを指定します。
    3. prefix パラメーターは、キャッシュバケットテーブルの名前を作成する際に、ターゲットキャッシュの名前に付与される文字列を定義します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    		<connectionPool connectionUrl="jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1" 
    				username="sa" 
    				driverClass="org.h2.Driver"/>
    		<binaryKeyedTable dropOnExit="true" 
    				  createOnStart="true" 
    				  prefix="ISPN_BUCKET_TABLE">
    
    Copy to Clipboard Toggle word wrap
  4. idColumn 要素

    idColumn 要素は、キャッシュキーまたはバケット ID が保存される列を定義します。これは以下のパラメーターを使用します。
    1. 使用されている列の名前を指定するには、name パラメーターを使用します。
    2. 使用されている列のタイプを指定するには、type パラメーターを使用します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    		<connectionPool connectionUrl="jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1" 
    				username="sa" 
    				driverClass="org.h2.Driver"/>
    		<binaryKeyedTable dropOnExit="true" 
    				  createOnStart="true" 
    				  prefix="ISPN_BUCKET_TABLE">
    			<idColumn name="ID_COLUMN" 
    				  type="VARCHAR(255)" />
    
    Copy to Clipboard Toggle word wrap
  5. dataColumn 要素

    dataColumn 要素は、キャッシュエントリーまたはバケットが保存される列を指定します。
    1. 使用されている列の名前を指定するには、name パラメーターを使用します。
    2. 使用されている列のタイプを指定するには、type パラメーターを使用します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    		<connectionPool connectionUrl="jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1" 
    				username="sa" 
    				driverClass="org.h2.Driver"/>
    		<binaryKeyedTable dropOnExit="true" 
    				  createOnStart="true" 
    				  prefix="ISPN_BUCKET_TABLE">
    			<idColumn name="ID_COLUMN" 
    				  type="VARCHAR(255)" />
    			<dataColumn name="DATA_COLUMN" 
    				    type="BINARY" />
    
    Copy to Clipboard Toggle word wrap
  6. timestampColumn 要素

    timestampColumn 要素は、キャッシュエントリーまたはバケットのタイムスタンプが保存される列を指定します。
    1. 使用されている列の名前を指定するには、name パラメーターを使用します。
    2. 使用されている列のタイプを指定するには、type パラメーターを使用します。
    <persistence>
    	<binaryKeyedJdbcStore fetchPersistentState="false"
    			      ignoreModifications="false" 
    			      purgeOnStartup="false">
    		<connectionPool connectionUrl="jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1" 
    				username="sa" 
    				driverClass="org.h2.Driver"/>
    		<binaryKeyedTable dropOnExit="true" 
    				  createOnStart="true" 
    				  prefix="ISPN_BUCKET_TABLE">
    			<idColumn name="ID_COLUMN" 
    				  type="VARCHAR(255)" />
    			<dataColumn name="DATA_COLUMN" 
    				    type="BINARY" />
    			<timestampColumn name="TIMESTAMP_COLUMN" 
    					 type="BIGINT" />
    		</binaryKeyedTable>
    	</binaryKeyedJdbcStore>
    </persistence>
    
    Copy to Clipboard Toggle word wrap

15.1.3. JdbcBinaryStore のプログラムを用いた設定

以下は、JdbcBinaryStore の設定例です。

手順15.3 JdbcBinaryStore のプログラムを用いた設定 (ライブラリーモード)

  1. 新規設定ビルダーを作成します。

    ConfigurationBuilder を使用して、新規の設定オブジェクトを作成します。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
    
    Copy to Clipboard Toggle word wrap
  2. JdbcBinaryStoreConfigurationBuilder を追加します。

    このストアに関連する特定の設定を構築するには、 JdbcBinaryStore 設定ビルダーを追加します。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
    
    Copy to Clipboard Toggle word wrap
  3. 永続性のセットアップ

    fetchPersistentState は、キャッシュの永続状態を取り込むかどうかを決定し、クラスターに参加する際にこれをローカルキャッシュストアに適用します。キャッシュストアが共有される場合、キャッシュが同じキャッシュストアにアクセスする際に、永続状態の取り込みは無視されます。複数のキャッシュローダーがこのプロパティーを true に設定する場合にキャッシュサービスを起動すると、設定の例外がスローされます。fetchPersistentState プロパティーはデフォルトでは false です。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
         .fetchPersistentState(false)
    
    Copy to Clipboard Toggle word wrap
  4. 変更の設定

    ignoreModifications は、書き込み操作を共有キャッシュローダーではなく、ローカルファイルキャッシュローダーに許可することで、書き込みメソッドが特定のキャッシュローダーにプッシュされるかどうかを決定します。特定の場合に、一時的なアプリケーションデータは、インメモリーキャッシュと同じサーバー上のファイルベースのキャッシュローダーにのみ存在します。たとえば、これはネットワーク内のすべてのサーバーによって使用される追加の JDBC ベースのキャッシュローダーで適用されます。ignoreModifications はデフォルトではfalse です。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
         .fetchPersistentState(false)
         .ignoreModifications(false)
    
    Copy to Clipboard Toggle word wrap
  5. パージの設定

    purgeOnStartup は、初回の起動時にキャッシュがパージされるかどうかを指定します。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
         .fetchPersistentState(false)
         .ignoreModifications(false)
         .purgeOnStartup(false)
    
    Copy to Clipboard Toggle word wrap
  6. テーブルの設定

    1. Drop Table On Exit メソッドの設定

      dropOnExit は、キャッシュストアが停止している際にテーブルが作成されるかどうかを決定します。これは、デフォルトでは false に設定されます。
    2. Create Table On Start メソッドの設定

      createOnStart は、現在テーブルが存在しない場合にキャッシュストアを起動すると、テーブルを作成します。このメソッドはデフォルトでは true です。
    3. Table Name Prefix の設定

      tableNamePrefix は、データが保存されるテーブルの名前にプレフィックスを設定します。
    4. idColumnName

      idColumnName プロパティーは、キャッシュキーまたはバケット ID が保存される列を定義します。
    5. dataColumnName

      dataColumnName プロパティーは、キャッシュエントリーまたはバケット ID が保存される列を指定します。
    6. timestampColumnName

      timestampColumnName 要素は、キャッシュエントリーのタイムスタンプまたはバケットが保存される列を指定します。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
         .fetchPersistentState(false)
         .ignoreModifications(false)
         .purgeOnStartup(false)
         .table()
            .dropOnExit(true)
            .createOnStart(true)
            .tableNamePrefix("ISPN_BUCKET_TABLE")
            .idColumnName("ID_COLUMN").idColumnType("VARCHAR(255)")
            .dataColumnName("DATA_COLUMN").dataColumnType("BINARY")
            .timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT")
    
    Copy to Clipboard Toggle word wrap
  7. connectionPool 要素

    connectionPool 要素は、次のパラメーターを使用して JDBC ドライバーの接続プールを指定します。
    1. connectionUrl パラメーターは、JDBC ドライバー固有の接続 URL を指定します。
    2. username パラメーターには、connectionUrl 経由で接続するために使用されるユーザー名が含まれます。
    3. driverClass パラメーターは、データベースに接続するために使用されるドライバーのクラス名を指定します。
    ConfigurationBuilder builder = new ConfigurationBuilder();
      builder.persistence()
         .addStore(JdbcBinaryStoreConfigurationBuilder.class)
         .fetchPersistentState(false)
         .ignoreModifications(false)
         .purgeOnStartup(false)
         .table()
            .dropOnExit(true)
            .createOnStart(true)
            .tableNamePrefix("ISPN_BUCKET_TABLE")
            .idColumnName("ID_COLUMN").idColumnType("VARCHAR(255)")
            .dataColumnName("DATA_COLUMN").dataColumnType("BINARY")
            .timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT")
         .connectionPool()
            .connectionUrl("jdbc:h2:mem:infinispan_binary_based;DB_CLOSE_DELAY=-1")
            .username("sa")
            .driverClass("org.h2.Driver");
    
    
    Copy to Clipboard Toggle word wrap

注記

プログラムを使用した設定は、Red Hat JBoss Data Grid ライブラリーモードのみで利用できます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat