【问题标题】:Hibernate Search (Lucene) near-real-time indexmanager and Tomcat parallel deploymentsHibernate Search (Lucene) 近实时索引管理器和 Tomcat 并行部署
【发布时间】:2017-02-28 11:04:19
【问题描述】:

首先介绍一下背景知识:我目前在我的 Java Web 应用程序中使用 Hibernate Search 4.2,并且我处理编写大量的 Lucene 索引,我在其中存储了相当多的数据。使用基于目录的索引管理器时,对存储在我最大索引中的单个对象的索引操作大约需要 1 秒

为了提高性能,我将 indexmanager 切换到 near-real-time,性能得到了突飞猛进的提升,但现在我想使用 Tomcat Parallel Deployments 实现零停机时间部署(这允许我在单个 Tomcat 中并排拥有同一个应用程序的 2 个不同版本),我发现我不能再使用近实时索引管理器了,因为它会缓冲内存中的修改并避免刷新到磁盘直到缓冲区内存已满或应用程序关闭。

我的问题是:在这种情况下我有哪些替代解决方案?我想保持索引过程尽可能同步

我查看了 Hibernate Search 的代码,发现有不同的提交策略和一个名为 IndexWriterHolder 的类,它允许我提交和刷新写入,但我不确定这些 API 是否或如何被公开曝光。

我还看到 Lucene 4 实现了并发刷新,我在 Hibernate Search 5 中发现了 ma​​x_thread_states 标志,它允许我指定并发写入器的数量每个 IndexWriter 的线程,但我以前从未使用过它,我不确定并发刷新是否对我的情况有帮助。

非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: java hibernate tomcat lucene hibernate-search


    【解决方案1】:

    很好的问题。简短的回答是,目前这是不可能的。

    IndexWriterHolder 确实不是公共 API,并且由于它在后台线程中处理队列而难以公开:直接调用它而不是通过将事件调度到队列中会很不礼貌。

    Lucene 的并发刷新功能会在安全的情况下自动使用;例如MassIndexing期间;我不希望 max_thread_states 属性对您有太大帮助,但值得尝试其他调整选项。

    我是 Hibernate Search 开发人员之一,并不了解 Tomcat 的并行部署:这听起来像是一个有趣的功能,我们可以探索支持它。请在JIRA 上提出功能请求或在forums 上开始对话,以更好地帮助我们了解其工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多