11.8. 性能调优


11.8.1. 以 SYNC 模式进行批处理写入

默认情况下,索引管理器 以同步模式工作,这意味着当数据被写入 Data Grid 时,它将同步执行索引操作。这个同步保证索引始终与数据一致(因此在搜索中可见),但可能会减慢写操作的速度,因为它也会执行对索引的提交。提交是 Lucene 中的非常昂贵的操作,因此,来自不同节点的多个写入可以自动批量到一个提交中,以减少影响。

因此,当将数据加载到启用了索引的 Data Grid 时,请尝试使用多个线程来利用这个批处理。

如果使用多个线程不会导致所需的性能,替代方案是加载带有临时禁用的索引的数据,并在 之后运行重新索引操作。这可以通过使用 SKIP_INDEXING 标志写入数据:

cache.getAdvancedCache().withFlags(Flag.SKIP_INDEXING).put("key","value");

11.8.2. 使用 async 模式编写

如果数据写入和数据在查询中可见时可以接受小的延迟,则索引管理器可以配置为以 async 模式 工作。async 模式提供更好的写入性能,因为在这个模式中以可配置的间隔进行。

配置:

<distributed-cache name="default">
    <indexing>
        <!-- Index data in async mode -->
        <property name="default.worker.execution">async</property>
        <!-- Optional: configure the commit interval, default is 1000ms -->
        <property name="default.index_flush_interval">500</property>
    </indexing>
</distributed-cache>

11.8.3. 索引读取器 async 策略

Lucene 在内部与索引的快照一起工作:一旦打开 IndexReader ,它只会看到索引更改直到打开了点;在索引读取程序刷新前,进一步的索引更改将无法看到。默认情况下,Data Grid 中使用的索引管理器将在每次查询前检查索引读取器的最新性,并在需要时刷新它们。

通过将 reader.strategy 配置设置为 async,将这个策略重新排序此策略来放宽此新性检查到预先配置的间隔:

<distributed-cache name="default">
    <indexing>
        <property name="default.reader.strategy">async</property>
        <!-- refresh reader every 1s, default is 5s -->
        <property name="default.reader.async_refresh_period_ms">1000</property>
    </indexing>
</distributed-cache>

11.8.4. Lucene 选项

可以在 Lucene 中直接应用调优选项。如需了解更多详细信息,请参阅 Hibernate 搜索手册

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部