Tôi có vài tập lệnh được tải bởi cron khá thường xuyên. Ngay bây giờ tôi không lưu trữ bất kỳ nhật ký nào, vì vậy nếu bất kỳ tập lệnh nào không tải được, tôi sẽ không biết nó cho đến khi tôi thấy kết quả - và ngay cả khi tôi nhận thấy kết quả là không chính xác, tôi không thể làm bất cứ điều gì vì tôi don ' t biết tập lệnh nào bị lỗi.Tính năng lưu trữ nhật ký trong cơ sở dữ liệu hoặc tệp sql hiệu quả hơn là gì?
Tôi đã quyết định lưu trữ nhật ký, nhưng tôi vẫn không chắc chắn cách thực hiện. Vì vậy, câu hỏi của tôi là - những gì hiệu quả hơn - lưu trữ các bản ghi trong cơ sở dữ liệu sql hoặc các tập tin?
Tôi có thể tạo bảng 'nhật ký' trong cơ sở dữ liệu mysql của mình và lưu trữ mỗi nhật ký trong hàng riêng biệt hoặc tôi chỉ có thể sử dụng tệp file_put_contents hoặc fopen/fwrite của php để lưu trữ nhật ký trong các tệp riêng biệt.
Tập lệnh của tôi sẽ thêm khoảng 5 nhật ký (trong tổng số) mỗi phút khi làm việc. Tôi đã thực hiện vài bài kiểm tra để xác định những gì nhanh hơn - fopen/fwrite hoặc chèn mysql. Tôi lặp lại một tuyên bố "chèn" 3000 lần để tạo 3000 hàng và lặp fopen/fwrite 3000 lần để tạo 3000 tệp với văn bản mẫu. Fwrite thực hiện nhanh hơn 4-5 lần so với chèn của sql. Tôi đã thực hiện một vòng lặp thứ hai - Tôi lặp một tuyên bố 'chọn' và gán nó cho một chuỗi 3000 lần - Tôi cũng đã mở 3000 tệp bằng cách sử dụng 'fopen' và gán kết quả cho chuỗi. Kết quả là như nhau - fopen/fwrite hoàn thành nhiệm vụ nhanh hơn 4-5 lần.
Vì vậy, với tất cả những người lập trình có kinh nghiệm - trải nghiệm của bạn về lưu trữ nhật ký là gì? Lời khuyên nào?
// 04.09.2011 EDIT - Cảm ơn tất cả vì câu trả lời của bạn, họ đã giúp đỡ rất nhiều. Mỗi bài đăng có giá trị, do đó, rất khó để chỉ chấp nhận một câu trả lời ;-)
@the chậm là ở trên cao của 'tuyên bố insert'. Nếu bạn thêm dữ liệu vào tệp CSV và đọc dữ liệu đó bằng cách sử dụng 'tải dữ liệu infile', 4-5 lần sẽ nhanh chóng làm tan chảy 2 lần, 1x để ghi tệp CSV, 1x để tải dữ liệu tải xuống. – Johan
@firian - Bạn chỉ cần kích hoạt kịch bản để gửi email (chứa các chi tiết) cho bạn khi có sự cố – ajreal
Bạn có thể sử dụng cơ sở dữ liệu bộ nhớ cache như redis hoặc memcache và một quá trình để giữ tất cả điều này trong mysql. Bạn cũng có thể sử dụng MongoDB trực tiếp hoặc sử dụng redis bridge. Redis nó thực sự nhanh chóng, mongo chậm nhất của nó. MySQL thực sự của nó thực sự chậm xD. Bạn cũng có thể sử dụng một số dịch vụ nhật ký bên ngoài như loggly.com – user1710825