您好,登錄后才能下訂單哦!
報(bào)表數(shù)據(jù)的可控緩存是怎樣的,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
使用緩存可以提升報(bào)表性能是一個(gè)共識,一般高端報(bào)表工具都會提供報(bào)表緩存功能,將整個(gè)報(bào)表計(jì)算結(jié)果緩存在文件系統(tǒng)中,以便用戶下次訪問參數(shù)相同的報(bào)表時(shí)可以快速讀取緩存結(jié)果進(jìn)行展現(xiàn)。潤乾報(bào)表作為報(bào)表工具的領(lǐng)軍品牌,當(dāng)然也具有這種常規(guī)的緩存功能。
但在有些情況下,報(bào)表開發(fā)人員還希望進(jìn)一步控制緩存的內(nèi)容,比如對于緩存內(nèi)容,可能只想緩存一部分而不是整個(gè)報(bào)表結(jié)果,或者能夠讓其它報(bào)表或程序復(fù)用緩存內(nèi)容,又比如對于超時(shí)設(shè)置,可能希望為不同的緩存結(jié)果設(shè)置不同的超時(shí)時(shí)間。這些需求都來自于實(shí)際業(yè)務(wù)中需要應(yīng)對的數(shù)據(jù)量和實(shí)時(shí)性方面的不同情況,也是一般報(bào)表工具的緩存功能無法滿足的。
潤乾報(bào)表內(nèi)置了可編程的數(shù)據(jù)計(jì)算引擎(結(jié)合集算器實(shí)現(xiàn)),允許開發(fā)人員靈活控制緩存內(nèi)容,稱為可控緩存。可控緩存能夠帶來更大的靈活性,下面就前面提到的三點(diǎn)展開介紹。
1、緩存部分結(jié)果
在報(bào)表開發(fā)中,有時(shí)并不希望將所有報(bào)表結(jié)果進(jìn)行緩存,避免耗費(fèi)過高的緩存成本(磁盤空間和應(yīng)用服務(wù)器資源開銷)。另外,當(dāng)報(bào)表中的部分?jǐn)?shù)據(jù)實(shí)時(shí)性要求很高,需要實(shí)時(shí)與數(shù)據(jù)庫交互進(jìn)行數(shù)據(jù)查詢,那么就并不適合進(jìn)行緩存。這種情況下,通過潤乾報(bào)表的可控緩存可以將變化不太頻繁的中間結(jié)果緩存起來。當(dāng)報(bào)表再次請求時(shí),實(shí)時(shí)性要求高的數(shù)據(jù)仍然從數(shù)據(jù)庫中讀取,同時(shí)結(jié)合緩存中的非實(shí)時(shí)數(shù)據(jù)進(jìn)行報(bào)表計(jì)算,得到最終報(bào)表結(jié)果集。常規(guī)緩存方案中沒有這種緩存部分結(jié)果的功能,只能設(shè)置整個(gè)報(bào)表是否進(jìn)行緩存,這樣報(bào)表在涉及數(shù)據(jù)的不同時(shí)效性時(shí)就必須平衡兩者的矛盾,而潤乾報(bào)表在這方面顯然更加靈活,效率更高。
2、緩存結(jié)果復(fù)用
潤乾報(bào)表中可控緩存是可以復(fù)用的,一個(gè)報(bào)表的緩存結(jié)果(部分或全部)可以被其他報(bào)表或程序讀取并使用,而不必像常規(guī)報(bào)表緩存方案那樣重復(fù)緩存同樣的結(jié)果,這顯然也會大幅度提高緩存的整體效率。當(dāng)其他報(bào)表或程序使用某個(gè)報(bào)表的緩存結(jié)果時(shí),只需從緩存(一般是磁盤文件)中讀取,并與報(bào)表中其他數(shù)據(jù)來源(可能是 DB、文件,或是另一個(gè)報(bào)表的緩存)進(jìn)行混合運(yùn)算,就能得到報(bào)表需要的結(jié)果集,處理方式和緩存部分結(jié)果的方式類似。常規(guī)的報(bào)表緩存以報(bào)表模板為單位進(jìn)行緩存,彼此無法復(fù)用,會造成相當(dāng)?shù)馁Y源浪費(fèi),增加不小的性能開銷,而潤乾報(bào)表在這方面同樣體現(xiàn)了靈活和高效。
3、設(shè)置不同超時(shí)時(shí)間
緩存機(jī)制中一定會有超時(shí)時(shí)間,過時(shí)的緩存會被清除,報(bào)表再訪問時(shí)再重新緩存。一般報(bào)表工具的緩存超時(shí)時(shí)間在配置文件中設(shè)置,如通常的 3600s 或 7200s,這種設(shè)置往往作用于對單張報(bào)表的所有參數(shù),有時(shí)甚至作用于所有報(bào)表。換句話說,整個(gè)報(bào)表甚至整個(gè)系統(tǒng)都必須使用同樣的設(shè)置。
這種做法顯然性能不高,如果能夠針對不同的報(bào)表場景設(shè)置不同的超時(shí)時(shí)間,自然會更有效。比如,針對大量歷史數(shù)據(jù)進(jìn)行查詢的報(bào)表,由于歷史數(shù)據(jù)一般很少變化,我們希望報(bào)表的緩存結(jié)果可以保存較長時(shí)間,相應(yīng)地設(shè)置較長的超時(shí)時(shí)間;而針對數(shù)據(jù)變化頻繁,實(shí)時(shí)性要求較高的報(bào)表則設(shè)置較短的超時(shí)時(shí)間,以便滿足數(shù)據(jù)的實(shí)時(shí)性要求。
潤乾報(bào)表的結(jié)果緩存允許開發(fā)人員針對不同的報(bào)表設(shè)置不同的超時(shí)時(shí)間,以應(yīng)對不同的報(bào)表場景。這種做法同樣提供了更高的靈活性,使得報(bào)表緩存成為真正意義上的可控。
舉例
可控緩存的具體實(shí)現(xiàn)可以參考潤乾報(bào)表的相關(guān)文檔資料,這里只是通過一個(gè)簡單的例子說明一下結(jié)果緩存的使用方法:
首先使用潤乾報(bào)表內(nèi)置的集算器編寫腳本生成和讀取緩存文件,這個(gè)過程處于報(bào)表數(shù)據(jù)源的計(jì)算階段。
A | B | C | |
---|---|---|---|
1 | E:\work\esProc\ | / 緩存目錄 | |
2 | =“sales_”+string(d_date) | / 緩存文件名,報(bào)表名 + 參數(shù) (dfxName_ParamName) | |
3 | =file(A1+A2) | ||
4 | if A3.exists()&& interval@s(A3.date(),now())<3600 | result A3.import@b() | end |
5 | =connect(“demo”) | ||
6 | =A5.cursor(“SELECT 客戶 ID,sum( 單價(jià) * 數(shù)量) 訂單總額 FROM 訂單, 訂單明細(xì) WHERE 訂單. 訂單 ID= 訂單明細(xì). 訂單 ID and year(訂購日期)>? group by 客戶 ID order by 訂單總額 desc”,d_date) | ||
7 | =A6.fetch(5) | >A5.close() | |
8 | =A3.export@b(A7) | / 生成緩存文件 | |
9 | return A7 | / 為報(bào)表返回結(jié)果集 |
上述腳本首先指定緩存目錄,并根據(jù)參數(shù)設(shè)置緩存文件名稱,再根據(jù)文件名查找緩存文件是否存在(A4)。若存在且未超時(shí)則直接讀緩存,否則直接連接數(shù)據(jù)庫取數(shù)運(yùn)算,并將計(jì)算結(jié)果生成緩存文件。
對比一下,如果報(bào)表中不使用緩存,那么腳本只需要這樣編寫:
A | B | |
---|---|---|
1 | =connect(“demo”) | |
2 | =A1.cursor(“SELECT 客戶 ID,sum( 單價(jià) * 數(shù)量) 訂單總額 FROM 訂單, 訂單明細(xì) WHERE 訂單. 訂單 ID= 訂單明細(xì). 訂單 ID and year(訂購日期)>? group by 客戶 ID order by 訂單總額 desc”,d_date) | |
3 | =A2.fetch(5) | >A1.close() |
4 | return A3 |
然后,只需要在潤乾報(bào)表中調(diào)用上述集算腳本,編輯報(bào)表表達(dá)式就可以完成報(bào)表制作了。
需要注意的是,潤乾報(bào)表的可控緩存也有其適用場景,并不能完全取代常規(guī)緩存。常規(guī)緩存手段會連同報(bào)表計(jì)算結(jié)果以及呈現(xiàn)屬性一起保存,而這里的可控緩存只緩存數(shù)據(jù),在呈現(xiàn)時(shí)還要再次進(jìn)行外觀計(jì)算,因此更適用于數(shù)據(jù)計(jì)算強(qiáng)度較高,外觀計(jì)算強(qiáng)度較低的場景。實(shí)際應(yīng)用中,兩者可以結(jié)合使用。
關(guān)于報(bào)表數(shù)據(jù)的可控緩存是怎樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。