Thủ thuật xử lý dữ liệu lớn trong PHP

1875

Trong quá trình học và làm việc với ngôn ngữ lập trình PHP, ắt hẳn bạn đã từng đau đầu khi gặp vấn đề cần xử lý dữ liệu lớn trong PHP

Một vấn đề cụ thể thường thấy đó là khi bạn cần phải đọc một file dữ liệu lên đến hàng triệu dòng và insert dữ liệu này vào cơ sở dữ liệu. Vậy thì cách giải quyết vấn đề này như thế nào ?

Đưa ra giải pháp xử lý dữ liệu lớn trong PHP

Để giải quyết vấn đề xử lý dữ liệu lớn trong PHP thì chúng ta sẽ áp dụng thủ thuật chia để trị để xử lý dữ liệu lớn, tức là sẽ đọc từng phần của một file dữ liệu.

Mình lấy ví dụ bạn cần đọc một file dữ liêu là xml chứa 2 triệu dòng, việc đọc 1 lần và đưa dữ liệu vào cơ sở dữ liệu sẽ làm chậm hệ thống và rất mất thời gian, bởi lẽ khi đọc 2 triệu dòng dữ liệu, hệ thống của bạn phải dành hết công suất để đọc 2 triệu dòng này, khiến cho hệ thống phải chờ để xử lý, do vậy làm ảnh hưởng đến những công việc khác đang cần chờ xử lý tiếp theo. Hơn nữa, đọc 1 lúc 2 triệu dòng dữ liệu và đưa vào cơ sở dữ liệu sẽ có thể gây chết hệ thống của bạn.

Chính vì thế, thay vì đọc 1 lúc 2 triệu dòng dữ liệu, chúng ta có thể chia ra đọc thành từng phần theo từng khoảng thời gian khác nhau, chẳng hạn mỗi lần đọc khoảng 5 phút là nghỉ, rồi 5 phút tiếp theo lại đọc tiếp dòng dữ liệu tiếp theo trở đi, cứ thế đọc cho đến hết 2 triệu dòng dữ liệu. Giải pháp này sẽ giúp cho việc xử lý dữ liệu lớn trở nên dễ dàng và nhẹ nhàng hơn.

Thực thi giải pháp xử lý dữ liệu lớn trong PHP

Ở phần trên mình đã đưa ra giải pháp. Trong phần này chúng ta sẽ tiến hành thực thi, hiện thực hóa giải pháp một các cụ thể hơn.

a. Thuật toán

Thuật toán để giải quyết vấn đề trên đó là với 2 triệu dòng dữ liệu trong file xml chúng ta sẽ làm như sau:

  1. Set khoảng thời gian tối đã cho mỗi lần đọc là 5 phút
  2. Sau khi đọc 5 phút, lưu lại vị trí index đã dừng
  3. Tiếp tục đọc từ vị trí đã dừng
  4. Lặp lại bước 1,2
  5. Kiểm tra thời gian đọc nếu < 5 phút tức là đã đọc hết file dữ liệu xml
  6. Dừng việc đọc dữ liệu
-------------------- Thông tin cho Dev --------------------

b. Tiến hành code hiện thực hóa vấn đề 

Ở đoạn code trên mình khởi tạo 4 tham số là :

  1. $max_time : Số thời gian tối đa cho mỗi lần thực thi
  2. $start_time : Thời điểm bắt đầu xử lý
  3. $running_time : Thời điểm xử lý
  4. $continue : Vị trí index đã dừng và tiếp tục

Khi vòng lặp foreach chạy và duyệt từng node của file xml và tiến hành đọc dữ liệu để lưu vào cơ sở dữ liệu, song song đó ta sẽ check xem thời gian vòng lặp chạy có quá thời gian tối đa cho phép là tối đa 5 phút hay không bằng đoạn code

Bài viết này mình chia sẽ một thủ thuật nho nhỏ giúp bạn xử lý dữ liệu lớn trong PHP. Đây là một thủ thuật rất có ích cho bạn trong quá trình làm việc với các hệ thống lớn và yêu cầu xử lý dữ liệu lớn

Thủ thuật này sẽ làm giảm tải áp lực lên hệ thống của bạn, giúp nó chạy mượt và đỡ tốn thời gian đợi hơn.

Chúc các bạn thành công !

Techtalk Via kungfuphp