2015-09-28 70 views
0

我們計劃在Web應用程序中使用MySQL作爲RDBMS。但也可以將數據發送到Solr以支持更快的搜索。我正在尋求建議採用哪種方法,以及爲什麼:Solr DIH delta import

  1. 設置定期更新(比如說每30分鐘一次)的cron作業 - 大多數教程似乎都暗示了這一點。
  2. http post期間,向mySQL和Solr發送數據。

該應用程序將有用戶發佈的評論和不同的範圍屬性需要全文搜索和方面。

編輯:對於那些誰找到自己的方式到這個話題,Solr的wiki有在https://wiki.apache.org/solr/SolrPerformanceFactors

+0

如果您可以提供更多關於應用程序和數據的信息,它會更容易回答。 – YoungHobbit

回答

1

一個簡短的寫了這條如果您要爲用戶提供near-real時間數據,那麼你應該用第二種方法去。它將更新索引索引中的數據,並使make可供用戶搜索。

如果您不需要近實時搜索用戶,那麼您應該採用第一種方法,即每隔30分鐘更新一次索引。

但請記住,這些可能需要在solr設置中進行一些不同的配置。

+0

總是使用方法#2有任何缺點。爲什麼甚至考慮方法#1。 –

+0

@ beginner101取決於系統的配置是什麼w.r.t你索引了多少數據。你還計劃solrCloud模式還是獨立模式? – YoungHobbit

1

由於younghobbit建議對應用程序數據類型有更多的瞭解,所以這更容易回答。

即使如此,我會佈置一些已知的點,然後您可能會做出稍微更明智的選擇。

  1. SOLR索引不像交易處理數據庫。它旨在提高原始文本內容搜索的效率,並在內部爲搜索的速度提供一些好幫助(我不是SOLR內部專家..所以SOLR專家請隨時詳細介紹'好的stuf')。爲搜索索引數據的過程並不是很便宜,因此最好讓SOLR每X分鐘執行一次索引魔術,而不是每次都進行索引。畢竟,您希望它使用大部分可用資源爲搜索提供最相關的結果。
  2. 您可以根據需要隨時向SOLR發送數據,但只有在提交後才真正可用。您可以在每次操作後提交或讓SOLR每x分鐘執行一次自動提交。 (我不記得確切的配置,但我認爲它是15分鐘左右)。一個提交是真正觸發資源飢餓索引過程的事情,所以做太多的提交併不好。另一方面,承諾太少會導致過時指數。
  3. 既然你有一個MySQL數據庫,我猜是有更新的記錄。從4.x SOLR內部SOLR並沒有實際更新文件。 SOLR處理更新的方式是它將舊文檔標記爲已刪除,並簡單地創建一個新文檔。這意味着每次更新都會導致SOLR在磁盤上增加更多空間。您偶爾可以調用「優化」操作,SOLR將刪除「已刪除」文檔。當服務器不太忙時,Optimize再次耗盡資源並做得最好。優化還會導致SOLR在優化期間耗盡更多的磁盤空間(規則縮略圖=索引大小* 2)。 想象一下,如果您在30分鐘內獲得了10次更新的MySQL記錄,那麼如果您在每個http文章上向SOLR發送數據,那麼這將導致SOLR中的9個已刪除文檔和一個活動文檔。而在cron工作30分鐘的情況下,這意味着要發佈1條或最多2條記錄。
  4. SOLR不完全是事務性的。它有提交和回滾操作,但它們處理自上次提交後添加的所有文檔。 (建議閱讀SOLR文檔)。這與通常提交的http帖子不同,MySQL db的回滾將位於相同http請求的範圍內。比如你在每個http post上發送數據給SOLR,讓我們說你遇到需要回滾的場景,MySQL會做一個乾淨的回滾,但是SOLR回滾並不可行,因爲它可能會回滾當前http post發出的其他更改正在處理中。

就我個人而言,我認爲方法1更好,但您可能想要調整cron的頻率以獲得接近實時的搜索響應。真正的實時只能通過方法2來實現,但您必須考慮如何處理與SOLR有關的更新和事務。在選擇任何選項之前,請充分理解提交,回滾,優化SOLR中的操作。