您好,登錄后才能下訂單哦!
本篇內容介紹了“數據庫報表數據導出性能調優方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
報表數據導出是一個常見且令人頭疼的問題,該功能主要放在管理后臺,系統運營人員經常需要導出一些數據做分析。報表導出遇到的難題,一是數據量大,二是查詢耗時,也是最容易導致系統OOM或者拖垮數據庫的問題。
如何解決查詢慢的問題
報表數據導出通常伴隨著復雜的sql語句,使用很多的查詢條件,因此在設計表的時候我們都會通過添加冗余的列來減少多表連接查詢,如果是最近幾年的項目,考慮到報表數據量增長速度快且數據量大可能會使用分表解決,不過單表的數據量依然很大,且在遇到復雜的查詢語句時也需要查多個表并聚合結果,這依然是很耗時的操作。
目前關系型數據庫也被化分為OLAP和OLTP數據庫,阿里AnalyticDB(adb)就屬于分析型的分布式數據庫(OLAP),主要用于數據分析,使用列存方式提升查詢效率。adb非常適合應用于報表統計查詢業務。
如何降低內存的使用
poi是一個提供讀寫excel文件的API類庫,但使用不當很容易導致系統OOM,miniexcel正是為解決這一問題而編寫的,當然,筆者在編寫miniexcel時也考慮到了另一個問題,那就是大批量數據一次查詢出來會占用太多內存,報表數據導出通常是大批量的數據,比如幾十萬、上百萬,因此miniexcel也提供了分頁查詢導出的功能。
除此之外,miniexcel還支持自定義導入導出。miniexcel是一個基于poi封裝的輕量且擴展性強的報表導入導出工具,支持.xls、.xlsx、csv格式。
easyexcel是阿里開源的一款excel導入導出工具,也是基于poi封裝的,因此easyexcel與miniexcel在性能上并沒有太大區別。我們拿easyexcel與miniexcel做過對此測試,對比結果是miniexcel的導出耗時以及導出文件的大小都略優于easyexcel,這一部分原因與miniexcel放棄支持表格樣式有關。
目前miniexcel正在洋蔥集團內部推廣使用,作者也會一直維護這個項目,也非常歡迎業內朋友使用,并一起改進miniexcel。
最近我們的管理后臺頻繁被操作系統kill掉,筆者也從運維那里拿到一份dump數據,但由于運維提供的這份dump數據是在系統正常情況下導出的,因此并未能找出原因,不過從這份數據能夠看出,系統在正常使用情況下,所消費的堆內存大約是2.3g,大部分是mybatis與spring消耗的內存,其它比較耗內存的是一個數據導出操作,堆中存儲了五十多萬條記錄,因此筆者猜測系統頻繁掛掉是同時執行多個數據導出任務導致的。
雖然miniexcel提供了分頁導出的功能,但我們項目中并未廣泛使用這一特性,原因只有一個,使用分頁導出功能雖然能降低對內存的使用,避免多人同時導出大批量數據導致系統內存消耗過高最后被操作系統kill掉,但由于查詢本就耗時,分頁查詢會更加耗時,所以分頁功能目前只用于能用上索引的分頁查詢數據導出功能。
如果將報表導出操作的數據查詢從查mysql數據庫改為查詢分析型數據倉庫adb,將miniexcel提供的分頁導出功能與adb的高性能查詢結合,就能完美的解決數據導出占用大量內存導致系統頻繁掛掉的問題。這是一個報表數據導出相關業務功能的優化建議。
“數據庫報表數據導出性能調優方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。