Hi mọi người.
Hiện tại em đang có tìm hiểu về Export Excel file sử dụng Apache Poi trong Spring Boot
Em có thử mock data 1 list có >1000 phần từ thì em thấy chạy rất lâu ( vì phài loop qua từng phần tử một để set Cell,Row Value nên rất chậm )
Mọi người cho em hỏi với trường hợp số lượng phần tử rất lớn (lấy từ DB) ví dụ có thể lên đến 1000,10.000,100.000,.. record thì giải pháp Export Excel file sẽ là như thế nào ạ ? Em thấy loop qua từng phần tử như các hướng dẫn trên mạng thì sẽ rất tốn nhiều thời gian ạ.
Cảm ơn mọi người !
Hi bạn,
Mình có 1 gợi ý cho bạn, hiện tại team mình cũng đang sử dụng 2 giải pháp cùng đó là apache poi và thư viện jxls tuỳ trường hợp vs dữ liệu, nhưng có 1 lưu ý vs bạn là hay để kiểu giữ liệu khi đưa vào excel lên để dạng list<Object[]> thay vì List object cụ thể để tăng tốc độ xử lý khi ghi vào file. Hy vọng gợi ý có thể giúp ích cho bạn. Tks.
Cảm ơn bạn đã chia sẽ !
Đây là 1 vấn đề tương đối phức tạp và đã được cảnh báo bới apache POI: https://poi.apache.org/components/spreadsheet/limitations.html. Nguyên nhân là do định dạng của file excel khiến cho nó không thể sử dụng được output stream để ghi từng bó dữ liệu ra file được, mà nó phải tạo tạo ra toàn bộ cả 1 workbook ở trên bộ nhớ, sau đó mới save toàn bộ dự liệu trên bộ nhớ vào file được. Thế nên việc loop để tạo từng cell, rồi thêm cả việc cấp phát bộ nhớ lớn cũng sẽ làm tốc độ đọc ghi chậm đi rất nhiều.
Giải pháp tối ưu hơn có lẽ là lấy dữ liệu về client sau đó sử dụng framework ở client để tạo file excel em ạ, sẽ giảm tải được cho server và tận dụng được sức mạnh của client, có thể tốc độ không được cải thiện nhưng chí ít là giúp cho server không bị tràn bộ nhớ: https://stackask.com/question/export-excel-file-tu-du-lieu-o-trong-database/