2010-04-09 50 views
0

我編寫了一個ASP.NET網站,並在win'08上運行(遠程託管)。應用程序查詢11個非常大的Lucene索引(每個〜100GB)。我在Page_load()上打開IndexSearchers,並在用戶會話期間保持打開狀態。ASP.NET Lucene性能改進問題

我的問題:

  1. 的查詢需要約5秒鐘就可以完成 - 可以理解的,這些都是非常大的指標 - 但用戶需要更快的響應速度。我很好奇擠出更好的表現。 (我查看了Apache Lucene網站並嘗試了那裏的一些想法)。對如果&感興趣如何進一步調整它,特別是從asp.net角度來看。

  2. 一個想法是使用Solr而不是直接查詢Lucene。但這似乎與直覺相反,在兩者之間引入了另一種抽象,並可能增加延遲。移植到Solr是否值得頭痛?任何人都可以分享一些衡量標準,看看在改用Solr之後,如果它值得的話,你會得到哪些改進。

  3. 是否有一些可以在Solr中完成的事情可以複製以加快響應時間?

回答

1

一些問題/建議:

  • 你打所有 11指數對單個請求?
  • 你可以重新組織索引,以便只命中一個索引(即分片)?
  • 你運行應用程序的配置文件(使用dotTrace或類似的工具)?花費的時間在哪裏? Lucene.Net?
  • 如果大部分時間都花在Lucene.Net上,那麼如果遷移到Solr,延遲應該可以忽略不計(與剩餘的花費時間相比)。另外,Solr can be easily distributed可以提高性能。
  • 我對Lucene(我使用Solr)並不太熟悉,但是如果您在每個請求中搜索11個索引,是否可以並行運行這些搜索(例如使用TPL)?
+0

對索引的查詢依賴於上下文。我在用戶會話期間持有11個搜索器。我猜這是低效的,但這是一項急功近利。我想重新設計;如果我理解正確,你會建議遷移到Solr(推測是多核)。感謝您的迴應! – Mikos 2010-04-09 19:25:36

+0

你能以某種方式減少索引的數量嗎?所有的搜索都必須按順序執行嗎?藉助TPL,您可以使用延續創建未來任務並將其並行化。或者您可以嘗試彙集您的IndexSearchers以利用熱身活動。 – 2010-04-09 21:02:00

+0

無法縮小/摺疊它們 - 每個索引都有不同的用途。例如:一個索引是出版物列表,一個是專家組,一個是一組關聯/研究機構,等等......每個都需要單獨進行查詢,特別是w.r.t上下文。 – Mikos 2010-04-10 07:02:30

0

最重要的是從網絡層中移除搜索,並將其隔離到它自己的層(搜索層)。這樣,您就擁有一個專用資源的專用盒子,它可以加載索引,並在緩存中「預熱」,而不是讓每個用戶都擁有自己的索引閱讀器的副本。

+0

你能否澄清一下「隔離到搜索層」是什麼意思?我應該使用單獨的物理機器嗎?或者是其他東西? – Mikos 2010-04-09 20:51:10

+0

@ GalaticJello的建議正是Solr的所爲:) – 2010-04-09 20:57:33

+0

「在Solr中可以完成的一些關鍵事情可以被複制以加快響應時間嗎?」 ...以及上面列出的那些關鍵的東西,如果你想複製它們。 – GalacticJello 2010-04-12 15:03:18