【问题标题】:Sharing Hibernate Search index共享 Hibernate Search 索引
【发布时间】:2016-07-11 13:35:03
【问题描述】:

我想在我的应用程序中使用 Hibernate Search;该应用程序包含几个访问搜索索引的模块:

  • 一个写入器/读取器模块
  • 两个或三个只读模块

(模块将驻留在同一台物理机器上)

这可以吗?如果模块之间共享相同的索引目录就足够了吗?是否有任何性能惩罚?

【问题讨论】:

    标签: indexing lucene hibernate-search


    【解决方案1】:

    是的。只有在同一台机器上需要多个应用程序来写入时,才会有性能损失。

    由于在您的情况下只有一个应用程序会写入,因此您可以通过允许该应用程序使用“独占模式”并让其他应用程序只读来获得良好的性能。

    独占模式是自 5.0 版以来的默认模式,因此无需更改写入器/读取器应用程序的配置。

    需要将其他应用程序配置为在引导时不打开 IndexWriter,这将使它们获得索引写入锁。

    只需设置此属性:

    hibernate.search.default.exclusive_index_use = false
    

    一个限制:您不能使用section 3.2.2 中描述的近实时索引管理器,因为写入不会在每次写入操作时刷新到磁盘,因此其他应用程序不会看到最新的更改。

    【讨论】:

    • 谢谢!这种延迟大约有多大?秒?分钟?
    • 使用 NRT 时,延迟不受时间控制,而是由缓冲区满。所以这不是很实用,这就是我建议不要启用 NRT 的原因。即使是默认设置(非 NRT)也能提供相当不错的性能。
    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2020-12-26
    相关资源
    最近更新 更多