1. 程式人生 > >存在彙總統計等功能的大資料量報表的優化方案

存在彙總統計等功能的大資料量報表的優化方案

對於大資料量,多層分組的的彙總報表不能採用分頁標籤,可以採用如下的優化方案:

一、先初步對報表進行優化:

1、儘量在sql實現group分組,資料庫雖然要進行分組運算,但是資料庫中有索引,運算速度快,且 取到報表伺服器端的記錄數大大減少,取數速度大大加快,因此在報表端進行分組運算的時候只要對 很少的記錄數進行,報表的運算速度大大加快了。

2、修改背景色的表示式儘量少採用row(),比如在每一行的一個格子裡算出來行號,然後在背景 色表示式判斷。 背景色的奇偶行判斷,比如:if(row()%2==0,-3342337),主要是row(),是因為這種函式無法優化計 算,有多少個表示式就要計算多少次,而且必須在擴充套件完後拖後計算。這樣的話,如果擴充套件比較多的 話,對效能就會有比較大的影響。

3、對於交叉分組要儘量減少資料集個數,儘量用單資料集。

二、配置優化:

以JVM記憶體設定為1G的伺服器為例子,假設併發量最大為5,使用者請求的報表為200單元格*1000頁(數 據量可能上千萬,但通過條件查詢,最其中幾千條記錄),一般大資料量都沒有圖片,所以以每一個 單元格為0.5k計算,那麼在最大併發量下,得出報表系統記憶體使用量為: 200*1000*5*0.5/1024K=488.28125M 根據以上計算,我們在實際生產系統中,我們建議:

cachedReportTimeout設定成180分鐘,使用者資料量大的情況下,增大報表快取時間。
alwaysReloadDefine設定為no,開啟快取,這樣客戶在翻頁時,不再與資料庫互動,減輕資料庫伺服器的負擔。
同時在tag標籤中把useCache設定為yes。
timeout可以根據自己的實時要求進行設定,如果資料一天都不會變的話,建議設定為-1 。
maxConcurrentForReport為5,即併發量為5。
maxWaitForReport設定為10 ,即等待佇列裡允許的最大報表量。
maxWaitTimeForReport設定為300秒鐘,6分鐘內得不到響應,使用者需要再次請求。
maxCellNum,在記憶體中,同時計算的單元格數量建議為200單元格*500頁=100000格。
如果不能用快取,可以將快取開關關掉,重點關注一下併發和最大格子數的設定。

另外,報表裡,報表屬性-格子數,這個屬性可以寫成這樣的表示式:ds1.count()*13,如果還有一些固定格子,可以寫成ds1.count()*13+固定格子數。