Chúng tôi đã có một tình huống tương tự. Sau rất nhiều nỗ lực để làm cho tập lệnh tốt hơn, chúng tôi quyết định rằng chúng tôi cần một cách tiếp cận khác để việc nhập của chúng tôi hoạt động hiệu quả và không mất ~ 10 giờ.
Những gì chúng tôi đã làm là kết xuất tất cả mã PHP và thay vào đó sử dụng mysqlimport
để tải trực tiếp nội dung của tệp CSV vào một bảng. Bảng đó hiện chứa mọi thứ chúng ta cần, nhưng không phải ở dạng hữu ích cho chúng ta (không có cấu trúc, một số trường cần xử lý, v.v.)
Tuy nhiên, vì mọi thứ hiện đã có trong cơ sở dữ liệu nên chúng ta có thể làm mọi thứ chúng ta muốn với một truy vấn. Ví dụ:xóa tất cả dữ liệu không còn trong tệp nhập, đó chỉ là DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL;
, việc cập nhật các bản ghi hiện có chỉ là UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField);
.
Rõ ràng, đối với một tập lệnh nhập phức tạp, các truy vấn của bạn sẽ phức tạp hơn và bạn sẽ cần thêm chúng. Bạn thậm chí có thể cần phải ném một số thủ tục được lưu trữ vào để thực hiện xử lý trên các trường riêng lẻ. Nhưng nếu bạn có thể thực hiện kiểu tiếp cận này, bạn sẽ kết thúc với một quy trình có thể xử lý nhiều dữ liệu và rất có thể mở rộng.