我已經編寫了一個程序來將數據庫數據索引到磁盤,我不確定我的索引速度是否合適,即如果速度非常慢並且速度可以進一步提高。Lucene索引性能
我得到的速度大約是每小時15000個文件,大約相當於索引目錄大小的2600 KB用於創建新索引的大小。
我使用的是Lucene 6.0.0和Windows 8.1 64位操作系統,16 GB RAM和Intel Core i7 8 Core機器。我正在做本地機器上的索引,並不確定我擁有哪種類型的磁盤,這是Windows PC中的常用磁盤。
我正在使用Spring批處理到INNER JOIN
兩個數據庫表,並從ItemReader
得到一個Row Mapped Object,然後我從這個對象中準備Document
。
我一直使用的方法,writer.updateDocument(contentDuplicateKeyTerm, doc);
而不是addDocument(doc)
因爲在Lucene的6.0.0 updateDocument
增加了一個文件索引,如果文件尚不除了更新現有的文檔存在。
我不知道任何基準比較我的程序。
請建議。
編輯:現在,我能夠達到每小時約180,000文件的性能。在更新每個Document
之後,問題在做IndexWriter.commit()
,現在我定期提交併大大提高了性能。
你不能指望人們心靈感應地診斷你的表現問題。解析查詢,Lucene和磁盤輸出的性能,並嘗試找出瓶頸。此外,如果您尚未獲知'addDocument'和'updateDocument'之間的預期性能差異。如果你知道你沒有插入重複項,你可能想使用'addDocument'。 –
是的,你是對的。我不是說我有性能問題,我只是想知道**正常速度**。我編輯了我的問題。我在代碼中發現的一個缺陷是爲每個文檔進行提交。我正在使用'updateDocument',因爲重複項可能會嘗試進入(到目前爲止,沒有辦法預先過濾掉),我們不希望重複索引。 –
提交會產生_huge_差異。預期的速度是「非常高」,本身它應該最大限度地提高旋轉盤的吞吐量(如果這就是你認爲的「通常的」)。 –