2011-10-26 75 views
0

Lucene的大多數文檔建議保留indexReader的一個實例並重用它,因爲打開一個新的Reader的開銷。[Lucene]什麼是IndexReader/Searcher的開銷

但是我發現很難看到這個開銷是基於什麼以及是什麼影響它。

與此相關的是有多少開銷具有開放的IndexReader實際的原因?

這個問題的上下文是: 我們目前運行一個集羣tomcat堆棧,我們從ServletContainer做全文。 這些搜索是在每個客戶端的單獨Lucene索引上完成的,因爲每個客戶端只會搜索他自己的數據。這些索引中的每一個都包含從幾千到(當前)大約100,000個文檔。

由於羣集tomcat節點,任何客戶端都可以連接到任何tomcat節點上。 因此,保持IndexReader打開實際上意味着在每個tomcat節點上保持打開幾千個indexReaders。這似乎是一個壞主意,但不斷重新開放似乎也不是一個好主意。

雖然它可能對我有點改變我們部署Lucene的方式,如果它不需要,我寧願不要。

回答

0

通常情況下,字段高速緩存是最慢的一塊Lucene進行加熱,儘管其他的東西如過濾器和段指針也有所貢獻。保留在緩存中的具體數量將取決於您的使用情況,尤其是存儲多少數據(而不僅僅是索引)的情況。

您可以使用任何內存使用調查工具適合您的環境,以查看Lucene本身佔用您的應用程序的多少,但請記住,「預熱成本」也指操作系統和文件的各種緩存系統保持打開,這可能不會出現在top或任何您使用的。

你說得對,有成千上萬的索引是不常見的做法。標準的建議是讓他們共享一個索引並使用過濾器來確保返回適當的結果。

由於您對性能感興趣,您應該記住,在服務器上有數千個索引會導致數千個文件遍佈磁盤,這將導致大量的查找時間,如果不是你只有一個大的索引。根據您的要求,這可能會也可能不是問題。

作爲一個方面說明:它聽起來像您可能正在使用網絡文件系統,這對Lucene來說是一個很大的性能影響。