溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

報(bào)表數(shù)據(jù)的可控緩存是怎樣的

發(fā)布時(shí)間:2022-01-15 16:07:31 來源:億速云 閱讀:186 作者:柒染 欄目:大數(shù)據(jù)

報(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ì)算階段。


ABC
1E:\work\esProc\/ 緩存目錄
2=“sales_”+string(d_date)/ 緩存文件名,報(bào)表名 + 參數(shù) (dfxName_ParamName)
3=file(A1+A2)

4if A3.exists()&& interval@s(A3.date(),now())<3600result 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)/ 生成緩存文件
9return A7/ 為報(bào)表返回結(jié)果集

上述腳本首先指定緩存目錄,并根據(jù)參數(shù)設(shè)置緩存文件名稱,再根據(jù)文件名查找緩存文件是否存在(A4)。若存在且未超時(shí)則直接讀緩存,否則直接連接數(shù)據(jù)庫取數(shù)運(yùn)算,并將計(jì)算結(jié)果生成緩存文件。

對比一下,如果報(bào)表中不使用緩存,那么腳本只需要這樣編寫:


AB
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()
4return 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)知識。

向AI問一下細(xì)節(jié)

免責(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)容。

AI