我們平臺最近有個需求需要查詢每天的業務日志,然后也有導出功能。
每天業務量數據很大。每天都好幾千萬的數據。
問題分析
首先你這日志存哪里呀?文件系統還是數據庫表,還是 NoSQL,存的位置不一樣處理方式不一樣。
另外你的數據結構是怎么樣的,是簡單的數據結構,還是復雜結構,字段是不是很多。
假設你數據就在數據庫中,查詢的結果返回多少的數據?如果就返回幾萬,可以考慮轉換為 CSV 文件,CSV 文件 Excel 是可以打開的,而且 Excel 也有打開限制,記錄太多了 Excel 也會被拖死。
參考解決方案
針對你現在的數據庫,千萬級別的,不管采取什么方案,什么 POI 工具在線導出方案都會超時。
原因有:
數據處理時間會很長,生成的文件會很大如何導出數據庫表結構,網絡傳輸回來肯定會超時。
其次 Excel 建議的數據量一般是不超過 5 萬,全部導入到一個文件中,客戶的電腦是根本打不開的,Excel 早就會被拖死了。這樣的數據給你們業務毫無意義。就算勉強打開了如何導出數據庫表結構, Excel 的搜索功能根本用不了。
你這還是一個用戶導出的情況,如果 10 個用戶同時導出,你試試看?
所以,你需要和業務商量你們到底要這些數據干什么。但是放一個文件中肯定是沒有任何意義的。
正常來說針對這種數據量的通常處理方案是 Batch 做批量。根據數據庫的時間或者 ID 來進行批量處理后生成文件。然后將生成的文件放到某一個存儲位置,通常可以是云存儲。
前端用戶只提交請求,在導出界面可以這樣設計,當用戶導出數據量超過 2 萬后,前臺頁面提示說:您的導出請求已經被后臺批量程序處理,請檢查郵件獲得下載地址。
處理策略可以使用 API 調用或者消息。
正常的系統設計是針對這種數據量肯定不會做基于網頁的數據導出的。