1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          數據報表(什么是大數據報表)

          來源:互聯網轉載 時間:2024-05-02 09:52:00

          實際業務中有些報表比較“大”,查詢出的報表數據行數可以達到幾千萬甚至上億,這類行數很多的報表通常被成為“大報表”。大報表大部分情況下是清單明細報表,少量是分組報表。

          大數據報表查詢通常不會采用一次性取出所有記錄再交給前端呈現的方式,因為這樣要等很久,用戶體驗極差;而且報表服務器內存也吃不消。

          常見的方式是通過分頁來呈現大報表,一次只取一小部分數據,取數結束后立刻交給前端呈現,當頁碼變化時再取出相應頁數的數據,這樣可以加快報表呈現速度,用戶幾乎沒有等待感。

          具體如何實現呢?有幾種方式。

          1. 數據庫分頁
          業界最常用的做法是使用數據庫分頁來實現,具體來講,就是利用數據庫提供的返回指定行號范圍內記錄的語法。界面端根據當前頁號計算出行號范圍(每頁顯示固定行數)作為參數拼入 SQL 中,數據庫就會只返回當前頁的記錄,從而實現分頁呈現的效果。

          主要借助關系數據庫自身的能力,每種數據庫實現上會有所差異,Oracle 可以使用 rownum,MySQL 則可以 limit,具體實現網上有很多資料這里不再贅述。

          數據庫分頁有沒有什么不足?任何技術都有其應用范圍,數據分頁的問題主要集中在以下 4 點。

          (1)翻頁時效率較差
          用這種辦法呈現第一頁一般都會比較快,但向后翻頁時,所使用的取數 SQL 會被再次執行,并且將前面頁涉及的記錄跳過。對于有些沒有 OFFSET 關鍵字的數據庫,就只能由界面端自行跳過這些數據(取出后丟棄),而像 ORACLE 還需要用子查詢產生一個序號才能再用序號做過濾。這些動作都會降低效率,浪費時間,前幾頁還感覺不明顯,但如果頁號比較大時,翻頁就會有等待感了。

          (2) 可能出現數據不一致
          用這種辦法翻頁,每次按頁取數時都需要獨立地發出 SQL。這樣,如果在兩頁取數之間又有了插入、刪除動作,那么取的數反映的是最新的數據情況,很可能和原來的頁號匹配不上。例如,每頁 20 行,在第 1 頁取出后,用戶還沒有翻第 2 頁前,第 1 頁包含的 20 行記錄中被刪除了 1 行,那么用戶翻頁時取出的第 2 頁的第 1 行實際上是刪除操作前的第 22 行記錄,而原來的第 21 行實際上落到第 1 頁去了,如果要看,還要翻回第 1 頁才能看到。如果還要基于取出的數據做匯總統計,那就會出現錯誤、不一致的結果。

          為了克服這兩個問題,有時候我們還會用另一種方法,用 SQL 游標從數據庫中取數,在取出一頁呈現后,但并不終止這個游標,在翻下一頁的時候再繼續取數。這種方法能有效地克服上述兩個問題,翻頁效率較高,而且不會發生不一致的情況。不過,絕大多數的數據庫游標只能單向從前往后取數,表現在界面上就只能向后翻頁了,這一點很難向業務用戶交代,所以很少用這種辦法。

          當然,我們也可以結合這兩種辦法,向后翻頁時用游標,一旦需要向前翻頁,就重新執行取數 SQL。這樣會比每次分頁都重新取數的體驗好一些,但并沒有在根本上解決問題。

          (3) 無法實現分組報表
          除了清單報表,有時我們還要呈現大數據量的分組報表,報表包含分組、分組匯總及分組明細數據。我們知道,按頁取數按照翻頁每次讀取固定條數(一頁或幾頁)記錄,這樣根本無法保證一次性讀取一個完整分組,而分組呈現、分組匯總都要求基于整組數據來操作,否則就會出錯。

          (4) 無法使用其他數據源
          數據庫分頁是借助關系數據庫自身的能力,而對于非關系數據庫就不靈了。試想一下,NoSQL 怎么用 SQL 分頁,文本怎么做分頁?

          報表的多樣性數據源話題我們曾經討論過,在數據規模迅速膨脹的今天,基于非關系數據庫出報表已經非常普遍。


          除了數據庫分頁,還有其他更好的方式嗎?

          2. 硬編碼實現
          我們發現基于數據庫的分頁方式強依賴數據源,無法滿足其他數據源類型的需要,也就是與數據庫緊耦合的。我們需要一個低耦合數據源的實現方式以應對多樣性數據源場景,還能同時解決效率、準確性和分組呈現問題。

          按照主流的解題思路,可以通過編碼方式實現這個目標,實現思路大概是這樣:

          基于數據庫時,
          把取數和呈現做現兩個異步線程,取數線程發出 SQL 后就不斷取出數據后緩存到本地存儲中,呈現線程根據頁數計算出行數到本地緩存中去獲取數據顯示。這樣,只要已經取過的數據就能快速呈現,不會有等待感,還沒取到的數據需要等待一下也是正??衫斫獾?而取數線程只涉及一句 SQL,在數據庫中是同一個事務,也不會有不一致的問題。這樣,兩個問題都能得到解決。不過這需要設計一種可以按行號隨機訪問記錄的存儲格式,不然要靠遍歷把記錄數出來,那反應仍然會很遲鈍。

          基于非數據庫時,
          同樣設置取數和呈現兩個異步線程,取數時通過文件游標(或其他數據源提供的分批取數接口)分批讀取數據并緩存到本地,呈現階段則與上述方式完全一致。

          然后再利用報表工具開放的接口和前端報表進行交互,完成報表的分頁呈現。

          做分組報表時,
          就需要一次性取出完整分組,在代碼里進行分組匯總,并將匯總結果插入結果集一并返回給前端報表進行呈現,同時還要設置分組記錄標志位,以便前端報表在呈現時能夠為分組行設置不同的顯示效果(如加粗、標紅)。

          實現后的效果類似下面這樣:

          取數線程不停地取數緩存,呈現線程從緩存中讀取數據呈現,總頁數不斷變化

          通過上面的描述,可以看到自己硬編碼雖然可以實現,但復雜度很高。除了多線程編程,還要考慮緩存數據存儲形式、文件游標、分組讀取與匯總,此外借助其他報表工具進行呈現時還要對方開放足夠靈活的接口,…,這些都是挑戰。

          而且我們只考慮了呈現,如果還要導出 Excel 怎么辦?如果還要打印怎么辦?畢竟報表既然能查就應該能導出,能打印。這些需求在金融、制造行業都是真實存在的。


          (3) 使用支持大報表的報表工具
          如果前端使用報表工具開發報表,選用一個直接支持大報表呈現、導出、打印的報表工具則更為直接。工具實現了兩個異步線程的大報表機制,同時解決上面我們提到的問題,這些方面都封裝好直接使用。

          關于什么是大數據報表問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注本站行業資訊頻道了解更多相關知識。

          標簽:數據報表-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          信用卡透支消費利率為多少呢?一般來說,信用卡正常透支消費是不收取利息的,所以也沒有利率。只有在持卡人使用信用卡透支取現或是逾期還款、只還了當期賬單最低還款額的情況下,銀行才會從交易記賬日開始計收利息。通常,利息是按日利率萬分之五計算,按天收取,按月計收復利,直到還清為止。信用卡的透支利息是怎么產生的?1、透支取現:包括ATM取現,和信用卡現金轉出,這種是產生利息最常見的情況。畢竟信用卡只有透支消費...

          信用聯社不是農村信用社。農村信用社是中國農村商業銀行的前身,當農村信用社達到國家規定的指標以后,可以向有關機構提出申請轉成農村商業銀行。轉變為農商行后就無法再享受農村信用社可以享受的國家政策優惠了。而農村信用合作聯社通常情況下來說是縣一級法人機構,它與農村信用合作社分別是獨立的法人機構,信用.聯社一般是縣級以上的機構單位,而農村信用社是由自然人和其他獨立的法人單位一起出資組成的。當幾個農村信用社達...

          (相關資料圖)關于湖北移動合家歡怎樣收費的知識大家了解嗎?以下就是小編整理的關于湖北移動合家歡怎樣收費的介紹,希望可以給到大家一些參考,一起來了解下吧!1、超能合家歡頁面添加的流量共享成員不超過三人時,收取主卡賬戶每月10元功能費;超過三人時,收取主卡賬戶每月15元功能費,副卡不收取功能費。2、50GBWLAN流量僅限中國內地使用,最多支持3臺終端同時在線使用。認證賬號密碼統一使用主賬戶的手機號碼...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>