Solr有兩種commit的方式
- hard commit(又叫normal commit)
- soft commit
hard commit
在對(duì)hard commit進(jìn)行說(shuō)明之前需要對(duì)transaction log進(jìn)行說(shuō)明
transaction log(tlog)
tlog的作用是保證數(shù)據(jù)的一致性(類似于Oracle中的Redo log)毫胜,避免應(yīng)用非正常關(guān)閉時(shí)的數(shù)據(jù)丟失横媚。
commit操作時(shí)會(huì)將數(shù)據(jù)寫(xiě)入到tlog中,然后tlog會(huì)將數(shù)據(jù)的修改反映在索引庫(kù)中赡突。遇到應(yīng)用非正常關(guān)閉的情況膏潮,在應(yīng)用啟動(dòng)時(shí)裸弦,系統(tǒng)會(huì)將tlog中未操作的數(shù)據(jù)先寫(xiě)入到索引庫(kù)中。如果tlog中有大量的未操作的數(shù)據(jù)楷掉,系統(tǒng)啟動(dòng)時(shí)恢復(fù)的時(shí)間會(huì)很長(zhǎng)厢蒜。
openSearcher選項(xiàng)
在commit完成后,是否開(kāi)啟新的searcher烹植,以便能夠搜索到新的數(shù)據(jù)斑鸦。
開(kāi)啟新searcher時(shí),過(guò)期舊searcher的cache(如filterCache, queryResultCache等)草雕,對(duì)新searcher進(jìn)行Autowarming操作巷屿。
配置
<autoCommit>
<maxTime>600000</maxTime>
<maxDocs>50000</maxDocs>
<openSearcher>true</openSearcher>
</autoCommit>
soft commit
soft commit是solr 4.0中提供的新功能,soft commit是實(shí)現(xiàn)Solr的near real time search(NRT)功能的基礎(chǔ)
soft commit保證數(shù)據(jù)的可見(jiàn)性墩虹,無(wú)論此時(shí)數(shù)據(jù)是否保存在索引庫(kù)中嘱巾。
soft commit后將會(huì)開(kāi)啟新的searcher,過(guò)期舊searcher的cache(如filterCache, queryResultCache等)诫钓,對(duì)新searcher進(jìn)行Autowarming操作旬昭。
如果數(shù)據(jù)量大,Autowarming操作的時(shí)間會(huì)很長(zhǎng)菌湃。一旦Autowarming操作的時(shí)間大于soft commit的時(shí)間(新的searcher還沒(méi)有創(chuàng)建完畢问拘,有需要?jiǎng)?chuàng)建更新的searcher),將會(huì)一直打開(kāi)新的searcher,系統(tǒng)資源將會(huì)耗盡骤坐。因此對(duì)于數(shù)據(jù)量大的應(yīng)用盡可能的增加soft commit的時(shí)間绪杏。
配置
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
應(yīng)用場(chǎng)景
索引庫(kù)中數(shù)據(jù)量超大的情況
大大增加soft commit的時(shí)間,避免open too much searcher的問(wèn)題纽绍。
索引數(shù)據(jù)量大
避免因?yàn)閼?yīng)用非正常關(guān)閉引起的啟動(dòng)恢復(fù)時(shí)間過(guò)長(zhǎng)的情況蕾久,將hard commit時(shí)間盡可能的減少,如15秒拌夏。將openSearcher的值設(shè)為false腔彰。
總結(jié)
- Hard commits are about durability, hard commit實(shí)際上是將tlog中的修改寫(xiě)入到Lucene index中
- soft commits are about visibility,soft commit后的開(kāi)啟的new searcher能夠檢索到新的數(shù)據(jù)
兩者結(jié)合著使用辖佣,既能保證數(shù)據(jù)的完整性,又能確保速度搓逾。