簡體   English   中英

Solr DIH三角洲進口

[英]Solr DIH delta import

我們計划將MySQL用作Web應用程序中的RDBMS。 而且還可以將數據發送到Solr以支持更快的搜索。 我正在尋求有關建議使用哪種方法以及為什么的建議:

  1. 設置一個cron作業進行定期更新(例如每30分鍾一次)-大多數教程似乎都建議這樣做。
  2. 或者http post期間,將數據發送到mySQL和Solr。

該應用程序將具有用戶發布的評論和需要全文搜索和構面的不同范圍屬性。

編輯:對於那些找到解決該問題的方法的人,solr Wiki在https://wiki.apache.org/solr/SolrPerformanceFactors上對此進行了簡短的介紹。

如果您需要為用戶提供near-real數據,則應該采用第二種方法。 它將更新solr索引中的數據,並且供用戶搜索。

如果不需要近乎實時地搜索用戶,則應采用第一種方法,即每30分鍾更新一次索引。

但是請記住,這些操作確實可能需要在Solr設置中進行一些不同的配置。

正如younghobbit所建議的那樣,對應用程序數據的種類有更多的了解,這使答案更容易。

即使這樣,我也會安排一些我所知道的要點,然后您也許可以做出稍微更明智的選擇。

  1. SOLR索引不像事務處理數據庫。 它被設計為對原始文本內容搜索有效,並且在內部它可以幫助您提高搜索速度(不是SOLR內部專家。.所以SOLR專家請隨時詳細說明“ nice stuf”)。 為搜索數據建立索引的過程並不是很便宜,因此最好讓SOLR每隔X分鍾而不是一直進行索引。 畢竟,您希望它使用其大部分可用資源為搜索提供最相關的結果。
  2. 您可以根據需要隨時向SOLR發送數據,但實際上只有在提交后才可用。 您可以在每次操作后提交,也可以讓SOLR每隔x分鍾執行一次自動提交。 (我不記得確切的配置,但我認為大約需要15分鍾)。 提交真正觸發了資源匱乏的索引編制過程,因此執行過多的提交是不好的。 另一方面,太少的提交將導致索引過期。
  3. 由於您具有MySQL數據庫,因此我猜有些記錄也會更新。 從4.x版本開始,SOLR內部實際上並未更新文檔。 SOLR處理更新的方式是將舊文檔標記為已刪除,而只是創建一個新文檔。 這意味着每次更新都會導致SOLR逐漸使用磁盤上的更多空間。 您有時可以調用“優化”操作,SOLR會刪除“已刪除”的文檔。 同樣,Optimize占用大量資源,並且在服務器不太忙時最好完成。 “優化”還會導致SOLR在優化過程中消耗更多的磁盤空間(規則拇指=索引大小* 2)。 想象一下,如果您有一條MySQL記錄在30分鍾的時間內被更新了10次,那么如果您在每個http帖子上向SOLR發送數據,那將導致9條被刪除和SOLR中的一個活動文檔。 而對於30分鍾的cron作業,則意味着將發布1條或最多2條記錄。
  4. SOLR並不完全是事務性的。 它具有提交和回滾操作,但它們可處理自上次提交以來添加的所有文檔。 (建議閱讀SOLR文檔)。 這與通常提交的http帖子不同,MySQL db上的回滾將在同一http請求的范圍內。 例如,您在每個http帖子上向SOLR發送數據,並假設您遇到需要回滾的情況,MySQL會進行干凈的回滾,但是SOLR回滾是不可行的,因為它可能會回滾在當前http帖子期間進行的其他更改處理正在進行中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM