【问题标题】:What is a reasonable setting for Hibernate Search MassIndexer?Hibernate Search MassIndexer 的合理设置是什么?
【发布时间】:2012-10-09 10:42:35
【问题描述】:

在我的应用程序中,我使用 Hibernate Search 来管理我的一些映射模型类(10 个类,部分相互关联 - 使用 @987654322)的 Lucene 索引@ 在索引定义中有相当长的时间)。大约有。 1,500,000 个要索引的文档

为了重建整个索引,我使用文档中建议的质量索引器 http://docs.jboss.org/hibernate/search/3.3/reference/en-US/html/manual-index-changes.html

fullTextSession
    .createIndexer()
    .batchSizeToLoadObjects(200)
    .cacheMode(CacheMode.IGNORE)
    .purgeAllOnStart(true)
    .threadsToLoadObjects(10)
    .threadsForIndexWriter(10)
    .threadsForSubsequentFetching(5)
    .startAndWait();

我的数据库连接池大小为 50

我观察到索引过程开始很有希望,直到它达到所有文档的 25% 左右。之后性能急剧下降(接下来的 5% 所花费的时间是前 25% 的两倍),我想知道为什么会发生这种情况?

  • 我的对象加载线程和索引线程的比例是否错误?
  • 或者仅仅是因为索引的大小不断增长?这是否证明了这种性能下降是合理的?
  • 如何提高性能?如何实现时间的不断进步?

因为我使用投影而不是让 Hibernate Search 从 DB 中获取搜索结果,所以我的许多索引字段都存储在 Index (Store.YES) 中。这会显着影响性能吗?

-- 编辑:

我的 Hibernate 搜索配置:

properties.setProperty("hibernate.search.default.directory_provider", "filesystem");
properties.setProperty("hibernate.search.default.indexBase", searchIndexPath);
properties.setProperty("hibernate.search.indexing_strategy", "manual");
properties.setProperty("hibernate.default_batch_fetch_size", "200");

【问题讨论】:

    标签: performance lucene hibernate-search


    【解决方案1】:

    您是否对您的应用程序进行了概要分析。在这种情况下很难给出一般性的建议。

    您还使用什么配置设置?有几个属性可以影响索引行为。有关详细信息,请参阅http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-batchindex-massindexer。索引期间的内存消耗是什么。您是否也对此进行了监控。

    因为我使用投影而不是让 Hibernate Search 从 DB 中获取搜索结果 >,所以我的许多索引字段都存储在 Index (Store.YES) 中。这是否影响 性能显着?

    我希望它主要影响索引大小而不是索引性能。

    【讨论】:

    • 现在我将 jvisualvm 应用于配置文件。目前它变慢了,CPU 负载下降,堆大小保持在高水平,但没有进一步增长。在快速启动时,CPU 负载要高得多,并且堆大小不断增加。大多数索引线程正在等待,实体加载线程正在运行。 char[] 和 HashMap 对象的数量越来越多。
    • 如果索引线程空闲,问题可能是实体的加载。您的实体之间是否存在某种循环,导致数据库负载很大。你有没有看到@IndexEmbedded上有一个depth参数。当然,这是否有问题取决于您的模型。它也可能有助于为 Hibernate Search 打开调试日志记录。它可能会给你一个提示。
    • 是的,我的实体之间实际上存在一些循环依赖关系,并且我已经使用了该深度参数。删除一些 indexEmbedded 时,它确实运行得更快。查看了 Hibernate SQL 日志后,我发现在索引父实体时会获取关联实体,尽管子实体会自行再次被索引(这里出现了另一个问题,这有点离题)我必须回顾,对于我的用例来说,哪些关联是真正必要的。谢谢哈代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多