Avatar
1
Hihi Teacher
Hihi Teacher
Export Excel file với số lượng phần tử lớn
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 !

  • Answer
java spring
Remain: 5
2 Answers
Avatar
oanh Phamvan Teacher
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.

  • 1
  • Reply
Cảm ơn bạn đã chia sẽ !  –  Hihi 1654239721000
Avatar
tvd12 Teacher
tvd12 Teacher
Đâ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/

  • 0
  • Reply