4.2. 查询 API
Data Grid 8 引入了一个更新的 Query API,它更易于使用,并具有更轻量的设计。与 Data Grid 7.x 相比,在分布式缓存中的值中搜索时,您可以获得更高效的查询性能。
因为 Data Grid 8 Query API 已通过可重构,所以有几个功能和功能资源现已弃用。
本节重点介绍从以前的版本迁移时您需要对配置进行的更改。这些更改应包括计划删除所有已弃用的接口、方法或其他配置。
有关已弃用的功能 和功能的完整列表,请参阅 Data Grid Deprecations 和 Removals (红帽知识库)。
索引数据网格缓存
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)
-
按如下方式更改所有其他枚举值:index
ing ().enabled (true)
声明性地,如果您的配置包含其他索引配置元素,则不需要指定 enabled="true"。
但是,如果您以编程方式配置索引,则必须调用 enabled ()
方法。同样,JSON 格式的 Data Grid 配置必须明确启用索引,例如:
"indexing": { "enabled": "true" ... },
"indexing": {
"enabled": "true"
...
},
索引类型
当未拒绝类型与索引缓存一起使用时,您必须在索引配置中声明所有索引类型,或者 Data Grid 会记录警告信息。此要求适用于 Java 类和 Protobuf 类型。
在 Data Grid 8 中启用索引
声明性
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以编程方式
import org.infinispan.configuration.cache.*; ConfigurationBuilder config=new ConfigurationBuilder(); config.indexing().enable().addIndexedEntity(Car.class).addIndexedEntity(Truck.class);
import org.infinispan.configuration.cache.*; ConfigurationBuilder config=new ConfigurationBuilder(); config.indexing().enable().addIndexedEntity(Car.class).addIndexedEntity(Truck.class);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在缓存中查询值
org.infinispan.query.SearchManager
接口在 Data Grid 8 中已弃用,不再支持 Lucene 和 Hibernate Search native 对象。
删除的方法
使用 Lucene Queries 的
.getQuery ()
方法。改为使用来自org.infinispan.query.Search
入口点的 Ickle 查询的替代方法。同样,在调用
.getQuery ()
时无法再指定多个目标实体类。Ickle 查询字符串提供实体。-
.buildQueryBuilderForClass ()
,直接构建 Hibernate Search 查询。改为使用 Ickle 查询。
org.infinispan.query.CacheQuery
接口也被弃用。您应该从 Search.getQueryFactory ()
方法获取 org.infinispan.query.dsl.Query
接口。
请注意,org.infinispan.query.dsl.Query
的实例不再缓存查询结果,并允许在调用 list ()
等方法时重新执行查询。
实体映射
现在,所有情况下都必须注解需要 @SortableField
排序的字段。
4.2.1. 查询 8.2 中的 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>
<replicated-cache name="myReplicatedCache" statistics="true">
<!-- Cache configuration goes here. -->
</replicated-cache>
不再通过 JMX 启用查询和索引统计信息。
索引数据网格缓存
声明索引类型
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>
<indexing> <property name="default.indexmanager">near-real-time</property> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing enabled="true"/>
<indexing enabled="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
索引读者和写器
Data Grid 8.2 引入了索引读取器和索引写入器,两者都是用于创建索引的内部组件。
要适应您的配置,您应该:
-
删除使用
property
元素或.addProperty ()
方法的索引配置。 使用以下方法之一配置索引行为:
-
声明:添加 <
index-reader> 和 &
lt;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>
<indexing> <property name="default.reader.async_refresh_period_ms">1000</property> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing> <index-reader refresh-interval="1000"/> </indexing>
<indexing> <index-reader refresh-interval="1000"/> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
writer 提交间隔
使用 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>
<indexing> <property name="default.worker.execution">async</property> <property name="default.index_flush_interval">500</property> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing> <index-writer commit-interval="500"/> </indexing>
<indexing> <index-writer commit-interval="500"/> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Lucene 索引调整属性
Data Grid 8.2 添加 ram-buffer-size
属性和 index-merge
元素,带有替换调优索引的属性的 factor
和 max-size
属性。
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>
<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>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing> <index-writer ram-buffer-size="256"> <index-merge factor="30" max-size="1024"/> </index-writer> </indexing>
<indexing> <index-writer ram-buffer-size="256"> <index-merge factor="30" max-size="1024"/> </index-writer> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
索引存储
Data Grid 8.2 包含一个 storage
属性,它替换之前版本中的 property
元素配置。storage
属性允许您配置是否将索引存储在 JVM 堆或主机文件系统中。
文件系统存储
Data Grid 8.1:
<indexing> <property name="default.directory_provider">filesystem</property> <property name="default.indexBase">${java.io.tmpdir}/baseDir</property> </indexing>
<indexing> <property name="default.directory_provider">filesystem</property> <property name="default.indexBase">${java.io.tmpdir}/baseDir</property> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing storage="filesystem" path="${java.io.tmpdir}/baseDir"/>
<indexing storage="filesystem" path="${java.io.tmpdir}/baseDir"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JVM 堆存储
Data Grid 8.1:
<indexing> <property name="default.directory_provider">local-heap</property> </indexing>
<indexing> <property name="default.directory_provider">local-heap</property> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid 8.2:
<indexing storage="local-heap"> </indexing>
<indexing storage="local-heap"> </indexing>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
调整索引属性
将索引配置迁移到 Data Grid 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 注解
有关迁移 Hibernate 和 Lucene 注解的信息,如 @Field
、@Indexed
、@SortableField
等等,请参阅 Hibernate Search Migration Guide 的 Annotation mapping 部分。
4.2.2. 在 8.3 中查询 API 更改 复制链接链接已复制到粘贴板!
Data Grid 8.3 删除 IndexedQueryMode
参数。Data Grid 会自动检测查询缓存的最佳模式,并在早期版本中忽略此可选参数。