怎麼檢查報表工具對大資料量報表的支援性?

xiaohuihui發表於2020-05-26

大量資料從資料庫裡全部查出來,然後再生成報表輸出到 web 端,一般需要很長時間,使用者體驗很差,而且報表一般採用記憶體計算,全讀入的話也容易爆掉記憶體。所以大資料量報表呈現時都是採用分頁的方式,儘量快速呈現第一頁,使用者也可以隨意翻頁,每次顯示的一頁資料量比較小,也就不會記憶體溢位。

大部分報表工具通常是使用資料庫的分頁機制。利用資料庫提供的返回指定行號範圍內記錄的語法,即介面端根據當前頁號計算出行號範圍(每頁顯示固定行數)作為引數拼入 SQL 中,資料庫就會只返回當前頁的記錄,從而實現分頁呈現的效果。

但是這種方式會有兩個問題:一個是向後翻頁時,需要重新計算 sql,等待感會比較強;另一個是可能會因為在翻頁時執行資料庫更新操作導致資料不一致。雖然這兩個問題可以透過遊標取數方式解決,但是遊標是一個單向操作,只能向後翻頁,不能向前翻頁,並不能從根本上解決問題。

潤乾報表則提出了完全不同的大資料包表處理方案,採用兩個非同步執行緒完成取數和呈現,取數執行緒發出 SQL 後不斷取出資料快取到本地,由呈現執行緒從本地快取中獲取資料進行顯示。這樣,已經取出並快取的資料就能快速呈現,不再有等待感;而取數執行緒所涉及的 SQL,在資料庫中保持同一個事務,也不會有不一致的問題。同時集檔案儲存格式支援跳轉到任意頁訪問,從而極大地改善了使用者體驗。

資料庫系統本身並不直接支援這種機制,需要在報表工具層面做大量工作,潤乾報表因為其內建的獨特計算引擎可以很方便實現這一點,其他報表工具則難以做到。潤乾報表中大報表展現設定很簡單,例如 sql 資料集可以直接在報表屬性裡設定大資料集:

imagepng

然後使用 big 標籤就可以快速展現報表資料了(在展現的同時後臺還在計算中,所以頁碼是會變化的):

imagepng

匯出 excel 時會有進度提醒:

imagepng

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2694410/,如需轉載,請註明出處,否則將追究法律責任。

相關文章