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