Làm sao để import file excel có hàng chục nghìn rows vào database?

332

I. Lời mở đầu

Trong những năm gần đây, việc lưu trữ dữ liệu hay thông tin ra file excel là khá phổ biến. Và việc lưu lại thông tin dữ liệu lên máy chủ để sử dụng cho các mục đích khác nhau là rất cần thiết. Bài toán được nói đến ở đây là chúng ta làm thế nào để cùng lúc import một lượng dữ liệu lớn vào CSDL của máy chủ (trang web của chúng ta).

II. Bài toán

Import file excel có hàng chục, hàng trăm nghìn rows vào CSDL trang web.

III. Giải quyết

1. Cài đặt redis:

Sau khi download redis xong, giải nén redis:

Tiếp tục đi vào folder và make:

Kiểm tra lại quá trình biên soajn:

Nếu không có gì lỗi thì bạn bắt đầu chạy cài đặt:

Khởi động redis server:

Và cuối cùng ping thử xem redis có chạy không:

2. Khởi tạo project:

config cho queue:

3. Bắt đầu nào:

Tạo một migration có tên là data, tại đây sẽ lưu trữ toàn bộ thông tin của file excel

 

Thêm các fields cần lưu trữ: namephone và address

 

Tiếp đó ta khởi tạo model Data:

 

Cài đặt package laravel-excel:

 

Đăng ký ServiceProvider trong config/app.php

 

Và cuối cùng chạy command để tạo ra file config/excel.php

 

Sau khi đã cài đăt xong package tiếp đến ta tiến hành viết code thôi nào =))

Tạo controller xử lý import:

  • Input: Request truyền vào là 1 file excel đã có sẵn data.
  • Output: Data được lưu trữ trong CSDL và thông báo thành công.

 

Tạo một service xử lý file import: Phần này sẽ dùng packge laravel-excel để xử lý lấy ra data trong file excel. function collection sẽ chuyển các rows trong file excel về dạng collection từ đó ta có thể bóc tách được các thành phần.

 

function startRows xử lý file excel từ hàng thứ 2 trở đi tức là bỏ phần header NameEmail, …

 

function chunkSize lấy ra lần lượt tổng số rows trong mỗi lần đọc để tránh quá tải.

 

Cuối cùng ta sẽ có một class như sau:

 

Tạo một job có chạy queue để lưu trữ trong trường hợp này sẽ phải lưu một dữ liệu lượng lớn dữ liệu nên ta sẽ phải đẩy nó vào queue.

 

Mở command và chạy queue rồi test thử ta sẽ thu được kết quả ahihi.

 

Input:

Output:

IV. Tạm kết

Qua bài viết chắc hẳn bạn đã có thể import một lượng lớn dữ liệu từ file excel vào CSDL rồi đúng không nào. Rất mong được sự góp ý từ mọi người.

TopDev via Viblo

SHARE