讀 CSV/TXT 的報表怎麼做分頁查詢?

xiaohuihui發表於2020-06-22

很容易想到的辦法是把文字資料灌到 RDB 裡,利用資料庫分頁機制來做,但這樣做會對資料庫產生很大影響(容量和效能),畢竟要分頁查詢的資料量不會太小。而且如果 CSV/TXT 資料就是從資料庫匯出去的,那這種方式基本就行不通了。

用 JAVA 硬寫也是一種辦法,就是比較麻煩,除了要能完成過濾、分組等集合運算,還要考慮非同步查詢的效率,如果透過行號(要遍歷資料)確定每頁的查詢範圍,效率就非常低了;透過位元組數來確定每頁要讀的資料會快很多,但要保證每次讀取的資料是整條的,如果讀出的最後一條資料被截斷,要有“補尾”機制,下一頁再讀的時候又要“去頭”,要考慮的問題比較多。

直接用支援文字分頁查詢的報表工具會比較簡單,比如這裡介紹的實現過程: ,用兩行指令碼完成建立檔案遊標和資料過濾,報表基於遊標完成非同步分頁呈現。這裡用了兩個非同步執行緒,取數執行緒透過封裝好的文字介面返回查詢遊標將資料分批快取到本地,呈現執行緒根據頁數計算出行數到本地快取中去獲取資料顯示。這裡已經解決了翻頁效率和去頭補尾的問題。

畫個圖感受一下:
imagepng
②和③分別是兩個執行緒,前者取數執行緒負責從文字里分批取數快取,後者呈現執行緒負責讀快取做報表呈現。

這樣做以後,除了報表能非同步查詢外,還支援匯出 Excel 和列印,比較方便。

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

相關文章