2008-08-30 38 views
5

Tôi muốn lưu nhật ký của một số thứ mà mọi người làm trong ứng dụng của tôi, trong một số trường hợp để có thể hoàn tác nó nếu cần.Đăng nhập vào một ứng dụng web PHP

Tốt nhất là lưu trữ các nhật ký như vậy trong một tệp hoặc cơ sở dữ liệu? Tôi hoàn toàn thua lỗ về những ưu và khuyết điểm ngoại trừ việc đó là một bảng khác để thiết lập.

Có tùy chọn thứ ba (hoặc thứ tư v.v.) mà tôi không biết rằng tôi nên xem xét và tìm hiểu không?

Trả lời

5

Bạn gần như chắc chắn muốn sử dụng cơ sở dữ liệu để truy cập linh hoạt, dựa trên bản ghi và tận dụng khả năng của cơ sở dữ liệu để xử lý truy cập dữ liệu đồng thời. Nếu bạn cần theo dõi thông tin có thể cần được hoàn tác, việc có thông tin có định dạng có cấu trúc là một lợi ích, vì có khả năng cập nhật hàng cho biết khi nào và theo đó một giao dịch cụ thể đã được hoàn tác.

Bạn có thể chỉ muốn ghi vào tệp nếu hiệu suất rất cao là một vấn đề hoặc nếu bạn có số lượng dữ liệu rất lớn hoặc không có cấu trúc trên mỗi bản ghi có thể không quan trọng để lưu trữ trong cơ sở dữ liệu. Lưu ý rằng Trừ khi ứng dụng của bạn có một số lượng rất lớn các tốc độ cơ sở dữ liệu giao dịch không phải là một vấn đề. Cũng lưu ý rằng nếu bạn đang làm việc với một tập tin bạn sẽ cần phải xử lý truy cập đồng thời (đọc/ghi/khóa) rất cẩn thận mà có thể không phải cái gì bạn muốn có để đối phó với.

2

Tôi muốn sử dụng cơ sở dữ liệu đơn giản để bảo trì - cũng nhiều chỉnh sửa trên một tệp có thể khiến một số bị bỏ lỡ.

1

Tôi sẽ đứng thứ hai cả hai đề xuất ở trên và thêm tệp đó khóa trên nhật ký tệp phẳng có thể gây ra sự cố khi có nhiều người dùng.

9

Có ít nhất một lý do xác định để lưu trữ trong cơ sở dữ liệu. Bạn có thể sử dụng INSERT DELAYED trong MySQL (hoặc các cấu trúc tương tự trong các cơ sở dữ liệu khác), trả về ngay lập tức. Bạn sẽ không nhận được bất kỳ dữ liệu trả về nào từ cơ sở dữ liệu với các loại truy vấn này và chúng không được đảm bảo được áp dụng.

Bằng cách sử dụng INSERT DELAYED, bạn sẽ không làm chậm ứng dụng của mình nhiều do ghi nhật ký. Cơ sở dữ liệu là miễn phí để viết INSERTs vào đĩa bất cứ lúc nào, do đó, nó có thể bó một loạt các chèn với nhau.

Bạn cần phải chú ý để sử dụng chức năng dấu thời gian được xây dựng của MySQL (như CURRENT_TIMESTAMP hoặc CUR_DATE()), vì chúng sẽ được gọi bất cứ khi nào truy vấn được thực thi. Vì vậy, bạn nên đảm bảo rằng bất kỳ dữ liệu thời gian nào được tạo bằng ngôn ngữ lập trình của bạn và không phải bởi cơ sở dữ liệu. (Đoạn này có thể là MySQL cụ thể)

+2

Đó là một mục tiêu mới đối với tôi. Rất trơn. –

+1

không được bảo đảm? nghe có vẻ không phải là một ý tưởng hay. bạn có thể giải thích điều đó không? –

3

Tôi là một fan hâm mộ lớn của log4php. Nó cung cấp cho bạn một giao diện chuẩn cho các hành động ghi nhật ký. Nó dựa trên log4j. Thư viện tải một tập tin cấu hình trung tâm, vì vậy bạn không bao giờ cần phải thay đổi mã của bạn để thay đổi đăng nhập. Nó cũng cung cấp một số mục tiêu nhật ký, như tệp, syslog, cơ sở dữ liệu, v.v.

Các vấn đề liên quan