6.11. JDBC 字符串的缓存存储
JDBC String 型缓存存储 JdbcStringBasedStore,使用 JDBC 驱动程序在底层数据库中加载和存储值。
JDBC String-Based 缓存存储:
- 将每个条目存储在表中,以提高并发负载吞吐量。
-
使用一个简单的一对一映射,使用键到
字符串接口将每个键映射到String对象。
数据网格提供了一个处理原语类型的默认实施DefaultTwoWayKey2StringMapper。
除了用于存储缓存条目的数据表外,存储还会创建一个 _META 表来存储元数据。此表用于确保任何现有数据库内容与当前数据网格版本和配置兼容。
默认情况下,Data Grid 共享不存储,这意味着集群中的所有节点都写入每个更新上的底层存储。如果只想操作对底层数据库进行写入,则必须将 JDBC 存储配置为共享。
分段
JdbcStringBasedStore 默认使用分段,它需要一个数据库表中的列来代表条目属于的片段。
6.11.1. 配置基于字符串的 JDBC 缓存存储
使用 JDBC 字符串的缓存配置可连接到数据库的数据网格缓存。
先决条件
-
远程缓存:将数据库驱动程序复制到 Data Grid 服务器安装的
server/lib目录中。 嵌入式缓存:将
infinispan-cachestore-jdbc依赖项添加到您的pom文件。<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-cachestore-jdbc</artifactId> </dependency>
流程
使用以下方法之一创建基于 JDBC 字符串的缓存存储配置:
声明性,添加
持久性元素或字段,然后添加带有以下架构命名空间的string-keyed-jdbc-store:xmlns="urn:infinispan:config:store:jdbc:13.0"
以编程方式,将以下方法添加到
ConfigurationBuilder中:persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
-
使用
dialect属性或dialect ()方法指定数据库的 dialect。 根据情况配置 JDBC 字符串的缓存存储的任何属性。
例如,指定缓存存储是否与带有 shared 属性或
方法的多个缓存实例共享。shared()- 添加 JDBC 连接工厂,使数据网格能够连接到数据库。
- 添加存储缓存条目的数据库表。
JDBC 字符串的缓存存储配置
XML
<distributed-cache>
<persistence>
<string-keyed-jdbc-store xmlns="urn:infinispan:config:store:jdbc:13.0"
dialect="H2">
<connection-pool connection-url="jdbc:h2:mem:infinispan"
username="sa"
password="changeme"
driver="org.h2.Driver"/>
<string-keyed-table create-on-start="true"
prefix="ISPN_STRING_TABLE">
<id-column name="ID_COLUMN"
type="VARCHAR(255)" />
<data-column name="DATA_COLUMN"
type="BINARY" />
<timestamp-column name="TIMESTAMP_COLUMN"
type="BIGINT" />
<segment-column name="SEGMENT_COLUMN"
type="INT"/>
</string-keyed-table>
</string-keyed-jdbc-store>
</persistence>
</distributed-cache>
JSON
{
"distributed-cache": {
"persistence": {
"string-keyed-jdbc-store": {
"dialect": "H2",
"string-keyed-table": {
"prefix": "ISPN_STRING_TABLE",
"create-on-start": true,
"id-column": {
"name": "ID_COLUMN",
"type": "VARCHAR(255)"
},
"data-column": {
"name": "DATA_COLUMN",
"type": "BINARY"
},
"timestamp-column": {
"name": "TIMESTAMP_COLUMN",
"type": "BIGINT"
},
"segment-column": {
"name": "SEGMENT_COLUMN",
"type": "INT"
}
},
"connection-pool": {
"connection-url": "jdbc:h2:mem:infinispan",
"driver": "org.h2.Driver",
"username": "sa",
"password": "changeme"
}
}
}
}
}
YAML
distributedCache:
persistence:
stringKeyedJdbcStore:
dialect: "H2"
stringKeyedTable:
prefix: "ISPN_STRING_TABLE"
createOnStart: true
idColumn:
name: "ID_COLUMN"
type: "VARCHAR(255)"
dataColumn:
name: "DATA_COLUMN"
type: "BINARY"
timestampColumn:
name: "TIMESTAMP_COLUMN"
type: "BIGINT"
segmentColumn:
name: "SEGMENT_COLUMN"
type: "INT"
connectionPool:
connectionUrl: "jdbc:h2:mem:infinispan"
driver: "org.h2.Driver"
username: "sa"
password: "changeme"
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
.dialect(DatabaseType.H2)
.table()
.dropOnExit(true)
.createOnStart(true)
.tableNamePrefix("ISPN_STRING_TABLE")
.idColumnName("ID_COLUMN").idColumnType("VARCHAR(255)")
.dataColumnName("DATA_COLUMN").dataColumnType("BINARY")
.timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT")
.segmentColumnName("SEGMENT_COLUMN").segmentColumnType("INT")
.connectionPool()
.connectionUrl("jdbc:h2:mem:infinispan")
.username("sa")
.password("changeme")
.driverClass("org.h2.Driver");
其他资源