簡體   English   中英

如何在Lucene中將FSdirectory索引文件加載為RAM目錄?

[英]How to load an FSdirectory index file as a RAMdirectory in Lucene?

我有一個硬盤索引文件作為FS目錄,大小約為2GB。 我想在ram中加載它以獲得更好的搜索速度。 我使用后面的代碼:

Directory dic=new RAMDirectory(FSDirectory.open(new File("file path")), IOContext.DEFAULT);

但我不確定它是否有效。 有誰知道它的工作與否? 還有什么方法比這更好嗎?

我會很高興有任何建議。謝謝。

是的,您可以像這樣構建RAMDirectory,但在您的情況下強烈建議不要這樣做。 RAMDirectory不適用於大型數據集(超過100MB)。 它將非常GC密集,長期構建和消耗寶貴的JAVA堆空間。

如果您有性能問題,請確保遵循此lucene常見問題解答中描述的所有指導原則

不要忘記,為了獲得下降搜索速度,操作系統需要將索引的某些部分緩存到內存中。 為此,您必須為操作系統提供一些免費的mem。 如果您有16Gb的物理RAM和8gb索引,則應該將jvm Xmx配置為8g。 檢查mem的一個不錯的linux工具是htop,它會將用於進程的RAM打印為綠色(您的堆空間),將RAM用作文件緩存作為黃色(索引數據)。

一些開發人員在應用程序啟動時執行預熱查詢,以防止第一個用戶在索引由os filecache加載時被卡住幾秒鍾。

然后,如果你仍然認為你可以獲得更好的性能,你可以嘗試一些RAMfs的技巧。 但是我懷疑你可以獲得比MMapDirectory更好的表現更好的表現和jvm。

暫無
暫無

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

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