2011-08-02 60 views
4

我期待引入Solr來爲搜索商業列表網站提供支持。該網站有大約200萬條記錄。我應該將Solr中存儲字段的大小保持在最小值嗎?

有一個搜索結果頁面將顯示每個結果的一些關鍵數據。我相信這個摘要信息所需的數據大約是每個結果1KB。

我可以簡單地索引Solr中搜索所需的字段 - 但這意味着需要爲每個結果單獨調用數據庫來填充摘要信息。如果Solr能夠返回所有這些數據,我預計它會產生比〜40個數據庫往返更高的性能。

問題是Solr的內存使用量會過大(我怎麼計算這個?),並且索引對於額外的數據可能需要很長的時間。

回答

7

與40db往返存儲相比,將存儲Solr中的這些字段將會大大受益。只要確保在模式配置中將該字段標記爲「未編入索引」(indexed = false),並且也可以將其壓縮(壓縮= true)(但當索引和檢索時,這當然會使用某些CPU)。

將字段標記爲「未編入索引」時,沒有分析器在索引編制時會處理字段,使其存儲速度比索引字段快得多。

+0

唯一需要注意的是DB和Solr中的數據一致。如果數據在數據庫中更改,則需要使用更新反映在Solr中。 –

3

這是一個折衷,你將不得不自己分析一下。

Solr的性能在很大程度上取決於緩存,不僅是查詢,還有文檔本身。這些緩存取決於內存,並且文檔越大,可以適應固定數量的內存越少。

文檔大小還影響索引大小和複製時間。對於具有主從設備配置的大型索引,這可能會影響您可以更新索引的速率。

理想情況下,您應該測量不同高速緩存大小下的高速緩存命中率,有無字段。如果你可以花費內存來獲得足夠高的緩存命中率這些字段,那麼通過一切手段去實現它。如果不能,您可能需要從另一個系統獲取文檔內容。

您還沒有提到第三種替代方法,即將文檔存儲在數據庫之外,但不存儲在Solr中。它們應該以儘可能接近搜索結果的格式進行存儲。創建/更新索引的代碼也可以創建/更新這些文檔。這是很多工作,但是就像所有事情一樣,它取決於你需要多少表現以及你願意做什麼來獲得它。

編輯:爲了測量緩存命中率和吞吐量,我發現最好的測試源是你當前的查詢日誌。採取一兩天的實時查詢,並根據不同的索引和配置運行它們,以查看它們的工作情況。

相關問題