2015-07-05 31 views
1

這是我的用例:我應該多長時間將文檔上傳到CloudSearch(Solr)?

我使用MySQL作爲我的主數據存儲和CloudSearch進行搜索。該數據庫包含表:線程,評論,upvotes,用戶。

我使用upvotes和created_at date(Hacker News Hot算法)創建了一個基於「趨勢」對搜索結果進行排序的表達式。這個表達式稱爲「潮流」,並在CloudSearch查詢中使用這樣的:/search?q=Superman&sort=trend+desc

(upotes-1)/pow(floor((_time-created_at)/3600000)+2, 1.8) 

現在,當用戶upvotes一個線程或評論,它存儲在MySQL數據庫。我的問題我應該如何保持雲端搜索與CloudSearch同步?

兩個選項我看到:

  1. 立即插入(替換)在MySQL的給予好評,然後更新CloudSearch比分。這涉及每次upvote發送單個文檔上傳,但確保實時準確性。
  2. 立即在MySQL中插入(取代)upvote,然後將upvote放在緩存的某處(Redis?)。每小時一次,將所有upvotes上傳到CloudSearch。

處理這種情況的最佳方法是什麼?

回答

0

這真的取決於很多事情

  1. 你Solr的設置,有多少服務器,多大的內存,CPU,存儲,有多少文件,什麼是每個碎片索引大小/服務器等。

  2. 您預計會有多少「估計的」upvotes?如果您選擇 1,則可以更容易地決定您是否可以如何估算這個 數字。

    由於您使用的是SolrCloud,因此它具有NRT功能,可確保 文檔幾乎立即可用於搜索。但是 它又取決於您當前的文檔語料庫,以及您期待的每秒或每分鐘更新多少個 。

如果你知道upvotes的數量(更新SOLR)是,如果你有足夠好的服務器,我會選擇1走,因爲它會降低manitaining另一個數據庫的開銷,以及邏輯更新upvotes每小時進入solr。

您可以隨時設置幾個測試服務器,並進行一些壓力測試以找出Solr性能降低的確切數量的更新。

我知道這可能不會給你一個確切的是或否,但正如我所說的,它確實取決於你的特定用例。

+0

這給了我一個相當好的答案。我會選擇1並按照建議進行壓力測試。如果事情發展到南方,我會用基準回到這裏。 –

+0

基準測試如何? –

相關問題