從報表性能談集算器
關于報表性能問題,自從有報表的那一天,報表的性能問題其實就存在,只不過是否突出到影響用戶感受而已。所謂的報表性能,其實90%甚至更多的是數據計算的性能,報表的本職工作其實應該僅僅是數據呈現而已,而因為報表格式復雜或樣式精美而帶來的展現效率問題其實是少之又少。
目前市面上大部分的報表廠商都集數據計算和數據呈現于一體,所以漸漸地,用戶就覺得報表就應該有計算能力并且計算能力還應當很出色,計算能力甚至是招標指標中的重要組成部分,所以一旦報表在計算過程中出現效率低,占用資源多等現象時,隨之而來的就是這個報表工具不好的結論。出現這樣的局面有一定歷史原因,在電子報表剛剛興起的時候,國內的信息化水平普遍不高,業務邏輯相對簡單,數據量也沒有積累到一定的量,所以報表具有簡單的計算能力即可滿足大多數用戶的需求。而信息化高速發展的今天,用當初的報表計算標準去應對越來越多的數據和日益復雜的業務需求顯然力不從心,這時候我們就需要讓報表回歸本質,做好它的本職工作,而報表所不擅長的計算則由更專業的計算引擎完成才是最好的解決方案。
既然要用專業的計算引擎輔助計算,那么就要說一下現在最常用的兩種解決方案:SQL和JAVA。先不說不同程序員寫出來的SQL語句和JAVA程序的執行效率參差不齊,單就SQL實現復雜多步運算的不便,各種存儲過程、中間表的高維護成本;JAVA語言實現數據集過濾冗長的代碼量,不便的調試方式等,都是這兩個過時的解決方案的問題。
潤乾公司的集算器就是一款專業的可以替代SQL和JAVA的更優的數據計算工具。那么先簡單介紹一下集算器。集算器是一款面向應用程序員和數據分析員的專注于(半)結構化數據分析與處理的程序設計語言。它的用法比JAVA更簡單,比SQL更靈活比perl/python,R語言開發效率更高。集算器的目標是主要試圖解決的描述計算的效率和實施計算的效率這兩個問題。所謂描述計算就是將自然思維過程告訴計算機并翻譯成計算機可以理解和執行的精細化形式語言。而實施計算性能則是通過合適的算法,讓CPU少執行一些基本運算,硬盤少讀取一些數據,從而達到提高性能的目的。下圖即是集算器在應用中的定位。
潤乾公司的集算器在很多應用場景下對報表性能的提高有著不可思議的成績。例如:
在某金融機構的業務報表中,原本在報表中用四個復雜SQL取數,在報表中進行復雜運算和大數據量的關聯,報表運行時間為3700秒。而使用了潤乾集算器,在不改變任何硬件配置情況下,使用并行計算以及更改關聯算法,該報表運行時間縮短到了105秒,性能提升了35倍之多。
在某銀行項目報表優化案例中,某表使用了5個sql類型數據源并進行相關關聯運算,運行效率為90秒,而經過集算器優化計算過程后,報表的運算效率縮短到4秒,性能提高了22.5倍,效果非常明顯。
在某省財政廳報表系統中,在執行1.5萬行*46列的某明細報表時,在未進行優化前的展現速度為400秒,而采用了集算器的大數據集+二進制流文件+游標技術后,報表首次訪問縮短到30秒,在啟用緩存后,第二次及緩存未失效時,展現為10秒,性能提高了13倍之多。
像這樣證明潤乾集算器可以提高報表性能例子不勝枚舉。這些強有力的案例都能證明,集算器確實是報表的加速器。更為可貴的是,潤乾的集算器不僅僅可以為潤乾報表加速,提供性能優化,它的集成性非常好,提供標準的JDBC接口供外部應用調用,即它可以服務于任何一個前端展示工具。
集算器除了可以提升報表運算性能外,它的價值還體現在它可以優化報表的應用結構。剛才說過,通常我們會用JAVA程序做數據計算準備,這樣就要求我們的JAVA程序必須和主程序一起打包編譯,這樣做會造成應用耦合度高,并且在數據準備算法有修改后,整個應用要再次編譯并重新啟動,不能做到熱切換,而集算器支持模塊化管理,集算器的計算腳本可以和報表模板一起管理維護,并且支持集算腳本的熱切換。而用SQL做數據計算過程中,存儲過程和中間表是不可避免的,這樣長此以往會造成數據庫壓力大,集算器可以將數據外置后,給數據庫減負。同時,集算器還支持使用多樣性數據源,做到揚長避短,充分利用各數據源優勢,例如利用非關系型數據庫的高IO吞吐,分布式文件系統的容錯機制以及關系型數據庫的結構化計算能力等。
總之,現在再遇到報表性能問題,我們就要辯證的看問題,報表的問題就去優化報表,計算的問題就去優化計算。哪疼醫哪才是解決問題的王道。