1.問題背景
設計到幾十張數據庫表,每張表有幾萬到十幾萬數據不等,現在需要盡可能快的導出excel數據。
2.遇到的問題及解決思路
2.1 數據量大,生成速度慢。下載的文件太大。
使用多線程下載,一個表的數據分配一條線程,全部下載完成壓縮成一個zip文件。
2.2 單表數據過多超過excel的條數據限制
當一個表的數據超過限制,使用csv文件的方式保存。
2.3 數據量大時,生成Excel數據和導出比nginx的默認響應時間(60s)長,導致接口請求超時。
當數據量大時,poi的excel生成和下載超過60s難以避免。但我們不能輕易去修改nginx的響應時間。我把生成數據文件和下載分為兩個接口,
消耗的時間主要是在生產數據文件的接口上,這里我生成數據的接口先是直接響應並給出文件名,然后開啟另外的線程去生成文件,繞過nginx的
超時時間,前端拿到文件名,定時10s去調用判斷文件是否存在的接口,存在就去下載文件。