針對目前線上產品進行壓力,發現不少問題,現在做個總結
我們的產品是乙個問答系統,主要核心技術是lucene搜尋,針對不同例項,分成不同的索引目錄,有n個例項會存在n個indexwriter
目前測試資料量及環境如下:
6核4g
資料量1000萬
問題字數:平均14個字
問題答案字數:平均418個字
優化前1000萬資料量需要構建索引16個小時,io已經極限
優化後1000萬資料量針對不同例項對比如下
索引構建所併發數
單例項構建索引
兩個例項兩個執行緒併發構建索引
三個例項三個執行緒併發構建索引
記憶體優化時間
182655毫秒3
分鐘例項1
192110
毫秒3.20
分鐘例項1
189883
毫秒3.164
分鐘例項2
192114
毫秒3.20
分鐘例項2
189889
毫秒3.164
分鐘例項3
189879
毫秒3.164
分鐘磁碟優化時間
1514423
毫秒25
分鐘例項1
3820694
毫秒63.678
分鐘例項1
4874940
毫秒81.249
分鐘例項2
3322985
毫秒55.383
分鐘例項2
4579260
毫秒76.321
分鐘例項3
4807620
毫秒80.127
分鐘單獨構建索引的時間
4663807
毫秒1.295
個小時例項1
7867191
毫秒2.185
小時例項1
13925086
毫秒3.868
小時例項2
7776207
毫秒2.16
小時例項2
14423098
毫秒4.006
小時例項3
14349161
毫秒3.985
小時構建索引和優化總時間
6196072
毫秒1.721
小時例項1
11811529
毫秒3.28
小時例項1
18991299
毫秒5.275
小時例項2
11202412
毫秒3.11
小時例項2
19212047
毫秒5.336
小時例項3
19356620
毫秒5.376小時
優化方針:
1、多執行緒構建索引
採用jdk1.5提供的執行緒池多執行緒構建索引
2、構建索引的指令碼調優
採用游標方式抓取資料而不是分頁抓取資料
3、lucene api調優
indexwriter.setrambuffersizemb(256);// m
indexwriter.setusecompoundfile(false);// 多檔案索引
indexwriter.setmergefactor(10);
lucene效能優化
優化搜尋效能 雖然建立索引的操作非常耗時,但是那畢竟只在最初建立時才需要,平時只是少量的維護操作,更何況這些可以放到乙個後台程序處理,並不影響使用者搜尋。我們建立索引的目的就是給使用者搜尋,所以搜尋的效能才是我們最關心的。下面就來 一下如何提高搜尋效能。1 將索引放入記憶體 這是乙個最直觀的想法,因...
提高Lucene索引效能
當索引的檔案不多時,用 lucene 預設的設定就能得到很好的效能。但是,如果索引大量檔案,就得通過一些手段去提高 lucene 索引效能。1 索引效能差的原因 1 lucene 索引過程 在索引檔案的過程中,lucene 不是直接將檔案索引到磁碟上,而是首先快取,然後在寫到磁碟。如上圖所示。2 索...
Lucene 索引優化 引數詳解
indexwriter 1 maxfieldlength 預設值 10000 一般設定為integer.max value。即擷取該域中的前10000個項 或片語 進行索引並被檢索,前10000個以外的項將不被索引和檢索。該值可在索引中隨時更改,並即時生 效 僅對更改後的索引生效,前面的依舊 2 s...