【问题标题】:ASP.NET Lucene Performance Improvements questionASP.NET Lucene 性能改进问题
【发布时间】:2010-04-09 15:28:02
【问题描述】:

我编写了一个 ASP.NET 网站并在 win'08(远程托管)上运行。该应用程序查询 11 个非常大的 Lucene 索引(每个约 100GB)。我在 Page_load() 上打开 IndexSearchers 并在用户会话期间保持它们打开。

我的问题:

  1. 查询需要大约 5 秒才能完成 - 可以理解,这些索引非常大 - 但用户希望得到更快的响应。我很想挤出更好的性能。 (我确实查看了 Apache Lucene 网站并尝试了那里的一些想法)。对您是否以及如何进一步调整它感兴趣,尤其是从 asp.net 的角度来看。

  2. 一个想法是使用 Solr 而不是直接查询 Lucene。但这似乎违反直觉,在两者之间引入了另一种抽象,可能会增加延迟。移植到 Solr 是否值得头疼?任何人都可以分享一些指标,说明您在切换到 Solr 后得到了哪些改进(如果值得的话)。

  3. 是否有一些可以在 Solr 中完成的关键事情可以被复制以加快响应时间?

【问题讨论】:

    标签: c# asp.net search lucene solr


    【解决方案1】:

    一些问题/想法:

    • 您是否针对单个请求点击了全部 11 个索引?
    • 能否重新组织索引,以便只命中 1 个索引(即分片)?
    • 您是否运行过应用程序的配置文件(使用 dotTrace 或类似工具)?时间花在哪里? Lucene.Net?
    • 如果大部分时间都花在 Lucene.Net 上,那么如果您迁移到 Solr,则延迟应该可以忽略不计(与其余时间相比)。另外,Solr can be easily distributed 可以提高性能。
    • 我对 Lucene 不太熟悉(我使用 Solr),但如果您要搜索每个请求的 11 个索引,是否可以并行运行这些搜索(例如使用 TPL)?

    【讨论】:

    • 对索引的查询取决于上下文。在用户会话期间,我将 11 个搜索器保持打开状态。我猜这是低效的,但这是一个匆忙的工作。我想重新设计;如果我理解正确,您会建议迁移到 Solr(可能是多核)。感谢您的回复!
    • 你能以某种方式减少索引的数量吗?是否必须按顺序执行所有搜索?使用 TPL,您可以创建具有延续性的未来任务并将其并行化。或者您可以尝试汇集您的 IndexSearchers 以利用热身。
    • 不能减少/折叠它们 - 每个索引都有不同的用途。例如:一个索引是出版物列表,一个是一组专家,一个是一组附属机构/机构等等......每个索引都需要单独查询,尤其是 w.r.t 上下文。
    • 查询不一定顺序,多个索引的结果组合的几种情况....您对多核Solr的想法?我确实分析了我的 webapp 和最大值。 Lucene 查询中的延迟占绝大多数。多核 Solr 是否提供显着的性能提升?顺便说一句,我知道您是 Solrnet 的创建者,很高兴听到您这样有才华和才华的人的来信。穆哈斯·格拉西亚斯!
    • 如果您迁移到 Solr,您会将 11 个索引中的每一个都表示为一个核心。除此之外,您可以将部分或全部索引分片 分出(分发)到其他盒子。我认为您将获得更好的性能并受益于额外的灵活性,但是我建议您运行一些测试以查看是否值得为 your 特定任务迁移,即如果您得到 4s 而不是 5s您可能会认为不值得迁移。
    【解决方案2】:

    最重要的是从网络层中删除搜索,并将其隔离到它自己的层(搜索层)。这样一来,您就拥有了一个专门的盒子,其中包含加载索引并在缓存中“预热”的专用资源,而不是让每个用户都拥有自己的索引阅读器的副本。

    【讨论】:

    • 你能澄清一下“隔离到搜索层”是什么意思吗?我应该使用单独的物理机器吗?还是别的什么?
    • @GalaticJello 的建议正是 Solr 的含义:)
    • “是否有一些可以在 Solr 中完成的关键事情可以被复制以加快响应时间?” ...如果您想复制它们,上面列出了这些关键内容。
    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2015-06-27
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多