11.8. 性能调优


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

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

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

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

cache.getAdvancedCache().withFlags(Flag.SKIP_INDEXING).put("key","value");
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

11.8.4. Lucene 选项

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat