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