Giải pháp hiệu quả tăng Traffic cho website
Traffic Exchange Site

Thủ thuật khi xử lý dữ liệu lớn bằng PHP

By
( Khởi nghiệp với Internet)
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

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

c. Giải thích

Ở đ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
Nếu đã quá thời gian cho phép thì sẽ tiến hành thoát khỏi vòng lặp bằng lệnh break, sau khi thoát khỏi vòng lặp ta sẽ tiến hành lưu vị trí index đã dừng
Ở lần chaỵ code lần 2, khi chạy lại toàn bộ đoạn code trên, chúng ta sẽ tiến hành kiểm tra xem các vị trí đã đọc rồi thì bỏ qua và không đọc nữa bằng câu lệnh continue và như vậy code sẽ chỉ chạy từ thời điểm dừng $continue_point trở đi mà thôi

Kết luận

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 !

Blog tổng hợp những kinh nghiệm được học, áp dụng và chia sẻ


Loading...