報(bào)表性能優(yōu)化方案之?dāng)?shù)據(jù)集緩存與共享
Posted on 2015-09-23 10:23 FineReport——報(bào)表技術(shù)領(lǐng)跑者 閱讀(97) 評(píng)論(0) 編輯 收藏1. 問題描述
對(duì)于大數(shù)據(jù)量報(bào)表,若每次直接從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),不僅增加數(shù)據(jù)庫(kù)服務(wù)器的壓力,也極大的影響了取數(shù)的速度從而降低了報(bào)表的執(zhí)行速度,為此FineReport提供了數(shù)據(jù)集緩存與共享功能。
FineReport可先將其數(shù)據(jù)集查詢的結(jié)果緩存下來,對(duì)于緩存下來的數(shù)據(jù),再次使用到相同數(shù)據(jù)集時(shí),無需再次連接數(shù)據(jù)庫(kù)重新查詢數(shù)據(jù),直接使用緩存下來的結(jié)果,即使用FineReport的數(shù)據(jù)集共享機(jī)制,達(dá)到資源復(fù)用,減少取數(shù)時(shí)間從而提高了報(bào)表的展現(xiàn)速度。
2. 數(shù)據(jù)集緩存
緩存分為緩存至內(nèi)存和緩存至磁盤。
2.1 緩存至內(nèi)存
設(shè)置方法:默認(rèn)的就是使用內(nèi)存緩存即所有數(shù)據(jù)都保存在內(nèi)存中,在數(shù)據(jù)庫(kù)查詢窗口可以看到,如下圖:
設(shè)置后的效果:當(dāng)執(zhí)行數(shù)據(jù)集時(shí)就會(huì)在將此記過緩存至內(nèi)存中,下次在執(zhí)行此數(shù)據(jù)集時(shí),會(huì)直接從內(nèi)存緩存中取數(shù)。
優(yōu)缺點(diǎn):空間資源有限,但效率很高,取數(shù)速度快。
什么情況使用:一般使用率高,且數(shù)據(jù)量不算太大的報(bào)表,可直接使用內(nèi)存緩存。
2.2 緩存至磁盤
設(shè)置方法:點(diǎn)擊下拉框選擇緩存至磁盤當(dāng)記錄大于,并設(shè)置行數(shù),如下:
緩存至磁盤,即將數(shù)據(jù)緩存到服務(wù)器的磁盤中,默認(rèn)是在C:\Documents and Settings\Administrator\.FineReport8.0\cache(windows操作系統(tǒng))下。
注:如啟用了磁盤緩存,發(fā)現(xiàn)系統(tǒng)目錄下沒有cache文件夾,不要感到驚訝,雖然激活了磁盤緩存,但不是馬上開始把數(shù)據(jù)寫到磁盤中,而是會(huì)考慮系統(tǒng)的實(shí)際運(yùn)行情況然后再進(jìn)行處理。
設(shè)置后的效果:記錄數(shù)默認(rèn)大于0行:表示從第0條數(shù)據(jù)開始,使用磁盤緩存。即只采用磁盤緩存,取出的數(shù)據(jù)是全部放在磁盤中。
記錄數(shù)大于如1000行:表示取得的數(shù)據(jù)前1000條是放入內(nèi)存中,剩余部分緩存至磁盤,當(dāng)用到1000條以外的數(shù)據(jù)時(shí),就會(huì)從磁盤中讀取數(shù)據(jù)。
優(yōu)缺點(diǎn):空間資源又大又便宜,幾乎沒有限制;但效率低,取數(shù)速度往往很慢。
什么情況使用:若是數(shù)據(jù)量很大的報(bào)表,如:幾十萬條記錄,可使用緩存至磁盤,設(shè)置恰當(dāng)?shù)男袛?shù),避免全存在內(nèi)存中,導(dǎo)致服務(wù)器OutOfMemory內(nèi)存溢出。
如行式引擎報(bào)表,可以將使用率高的前N頁(yè)數(shù)據(jù)緩存在內(nèi)存,剩余記錄緩存在磁盤中。
注:既然兩者都有優(yōu)缺點(diǎn),因此需要合理分配內(nèi)存和磁盤,把那些使用頻率最高的數(shù)據(jù)盡量放在內(nèi)存中,從而提高在內(nèi)存中的命中率。
3. 數(shù)據(jù)集共享
設(shè)置了數(shù)據(jù)集緩存后,只對(duì)當(dāng)前數(shù)據(jù)集再查詢時(shí)才能讀取緩存中的數(shù)據(jù),若多個(gè)模板包含有相同的數(shù)據(jù)集(定義的SQL查詢語(yǔ)句相同,傳入的參數(shù)值相同,才算相同的數(shù)據(jù)集),便可以啟用數(shù)據(jù)集共享,使得他們共享同一個(gè)緩存結(jié)果,從而節(jié)省數(shù)據(jù)庫(kù)資源,并且提高取數(shù)和報(bào)表的展現(xiàn)速度。
3.1 設(shè)置方法
在定義數(shù)據(jù)連接的地方勾選是否共享數(shù)據(jù)集,如下圖所示:
注:數(shù)據(jù)集緩存是對(duì)當(dāng)前數(shù)據(jù)集有效,而共享數(shù)據(jù)集是對(duì)不同模板的相同數(shù)據(jù)集有效,并且需要將需要共享的數(shù)據(jù)集都勾選上。
3.2 數(shù)據(jù)集共享屬性設(shè)置
我們可以對(duì)緩存下的結(jié)果進(jìn)行一些設(shè)置。
進(jìn)入FR平臺(tái)中,選擇管理系統(tǒng)>系統(tǒng)管理>緩存,可以看到數(shù)據(jù)集共享屬性如下圖所示:
最大活動(dòng)對(duì)象:指在緩存容器中最大放置的緩存對(duì)象個(gè)數(shù),如果活動(dòng)對(duì)象數(shù)超過此數(shù)目,則服務(wù)器會(huì)根據(jù)下面的緩存策略來選擇哪些對(duì)象留下,哪些被去除
最大生存時(shí)間:指的是緩存對(duì)象在容器中存活的最大時(shí)間,無論是否活動(dòng),一旦超過此時(shí)間,此緩存對(duì)象就失效,將會(huì)被移除
最大空閑時(shí)間:指的是緩存對(duì)象在容器中停留不被使用不能超過的時(shí)間,也就是空閑的時(shí)間,如果空閑的時(shí)間超過這個(gè)時(shí)間,此對(duì)象就會(huì)被移除。
注:管理系統(tǒng)>系統(tǒng)管理>緩存,下方的模板緩存屬性設(shè)置,是對(duì)模板計(jì)算的結(jié)果進(jìn)行緩存設(shè)置,而上面所說的在數(shù)據(jù)集處的緩存設(shè)置則是對(duì)數(shù)據(jù)進(jìn)行緩存設(shè)置,一個(gè)是對(duì)結(jié)果來說,一個(gè)是對(duì)于數(shù)據(jù)來說,要區(qū)別開來,這是兩個(gè)不同的概念。