將資料放至資料庫外或檔案系統來提高報表系統效能,報表系統效能

來源:互聯網
上載者:User

將資料放至資料庫外或檔案系統來提高報表系統效能,報表系統效能

         在報表應用中,針對曆史資料查詢的報表佔比很大,這類報表的特點是:第一,資料變化小,查詢的曆史資料幾乎不會發生變化;第二,資料量大,資料量隨時間跨度增大而不斷增加。如果資料始終存放在資料庫中,由於大多數資料庫的JDBC效能都很低下(JDBC取數過程要做資料對象轉換,比從檔案中讀取資料會慢一個數量級),這時涉及資料量較大或在並發較多的時候,報表的效能會急劇下降。如果能將這些變化不大的曆史資料移出資料庫,採用檔案系統儲存,將可能獲得比資料庫高得多的IO效能,從而提高報表的整體效能。

         但是,報表並不是直接使用未經處理資料進行呈現,還需要做進一步的運算。而檔案本身沒有計算能力,這種情況資料量一般也較大,不可能靠報表轉譯端的計算能力實現。

         集算報表在內建集算引擎的協助下可以基於庫外檔案做計算,支援的檔案類型包括:文本、Excel、JSON格式檔案等,還支援效率更高的二進位檔案。將較大資料量的曆史資料從資料庫中剝離,這樣除了可以滿足曆史查詢類報表的效能需求外,還可以藉助集算報表對混合資料來源(檔案+資料庫)的支援,進行大資料量的即時資料查詢,從檔案系統中讀取往期較大的曆史資料,從資料庫中讀取當期較小的即時資料進行混合計算。這樣的做法可以避免資料庫的IO瓶頸,快速提升報表效能,增大資料查詢範圍。同時,這也是最佳化資料庫的過程,將曆史資料移出,資料庫可以專註於保證業務系統資料的一致性,而不是耗費資源在大量的曆史查詢任務上。

         具體使用上,當使用者將資料儲存到檔案系統中後,即可使用集算報表進行資料查詢和計算,集算報表內建的集算引擎可以基於檔案(和資料庫)進行資料計算。使用時,可以參考如下步驟(舉例說明):

1、將資料庫中曆史資料匯出到檔案

    使用者可以自行選擇適當的方法將曆史資料匯出到檔案,當然這個過程也可以使用集算器來做,可以將資料匯出到文本,如果希望更高的效能,集算報表還可以支援更高效的二進位檔案格式(比文本能快出2-5倍)。在集算器(用免費版本即可)中執行類似如下代碼可將文字檔轉換成二進位格式:

     file("E:/訂單明細.b").export@b(file(“E:/訂單明細.txt”.cursor())

 

2、使用集算報表內建的集算引擎讀取資料檔案

    當資料外置後,採用集算報表就如同使用檔案資料來源做報表了,比如根據訂單詳細資料按客戶統計訂單數量和訂單金額,由於原始訂單資料非常大,所以讀入檔案時採用流式(檔案遊標)的方式逐步讀入。

    指令碼中使用的參數及其含義如下:


        指令碼:

        A1:通過檔案遊標採用串流的方式讀入大源文本資料;

        A2:按照指定的多個維度進行資料過濾,結果仍然是遊標;

        A3:根據選出的結果,按照客戶ID匯總訂單數量和訂單金額;

        A4:為報表返回結果集。

        

         如前面提到的,集算報表既可以針對單獨的檔案(曆史資料)進行查詢計算,還可以進行檔案+資料庫混合運算,進行大資料量即時查詢。

        A1-A3:與上一個指令碼一樣,匯總曆史資料;

        A5:根據指定參數執行sql,匯總當期資料;

        A6:將兩部分摘要資料合并(縱向拼接);

        A7:根據合并後的曆史和當期摘要資料再次匯總,得到各客戶的訂單數量和訂單金額。

 

3、在集算報表中調用集算指令碼,編輯報表運算式完成報表製作

 

       通過以上的過程可以清晰的看到,集算報表可以很好解決針對往期曆史(+當期)資料進行查詢時往往存在效能不高的問題,通過資料外置提升報表效能。


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.