Đăng nhập vào tập tin hoặc vào bảng cơ sở dữ liệu?


12

Tôi đang phát triển một ứng dụng web sử dụng MS SQL cho nhiều dữ liệu khác nhau: bao gồm người dùng, tài khoản người dùng, giấy phép người dùng, giá giấy phép, hóa đơn.

Tôi cần ghi nhật ký sử dụng hệ thống theo thời gian thực của người dùng và sử dụng hệ thống đó để thanh toán hàng tháng: ví dụ: đăng nhập bất cứ khi nào người dùng nhận được một trang / URL cụ thể và lập hóa đơn cho người dùng vào cuối tháng dựa trên số trang họ đã tìm nạp.

  • Tôi có nên viết các sự kiện nhật ký này vào một bảng trong cơ sở dữ liệu MS SQL của mình không?

  • Tôi có nên viết các sự kiện nhật ký này vào một tệp nhật ký không chỉ SQL không?

  • Tôi có nên viết các sự kiện nhật ký này vào một tệp nhật ký khác nhau cho mỗi người dùng không?

Đây không phải là một trang web có khối lượng đặc biệt cao: ví dụ: tối đa 10.000 người dùng, mỗi người thực hiện trung bình 5 sự kiện có thể đăng nhập / ngày => 50.000 sự kiện / ngày = 30 sự kiện / phút = 18.000.000 sự kiện / năm.

Tôi đang hỏi bởi vì một trong hai lựa chọn có vẻ khả thi và tôi không biết liệu ai có lợi thế rõ ràng hay không.

Dữ liệu liên quan đến một sự kiện có thể xuất hóa đơn rất đơn giản, ví dụ:

  • ID người dùng (mối quan hệ khóa ngoài với bảng Người dùng trong SQL)
  • Ngày và giờ
  • URL của trang có thể xuất hóa đơn

Câu trả lời của riêng tôi cho câu hỏi này như sau:

  • Một số lợi ích của việc ghi nhật ký vào bảng cơ sở dữ liệu:

    • Tính toàn vẹn quan hệ: ví dụ: các sự kiện đã ghi được liên kết với ID người dùng hợp lệ (bằng cách xác định ID người dùng là khóa ngoại giữa các bảng)
    • Dễ đọc để thanh toán: ví dụ: SELECT COUNT GROUP BYđể có được số lượng sự kiện nhật ký trên mỗi người dùng
  • Một số lợi ích của việc ghi vào tệp nhật ký:

    • Hiệu suất dễ dàng hơn: SQL được sử dụng ít thường xuyên hơn, ví dụ: chỉ dành cho các sự kiện đăng nhập của người dùng và chủ yếu chỉ được sử dụng để đọc
    • Quản lý dễ dàng hơn: dễ dàng hơn để lưu trữ dữ liệu cũ, ví dụ vào cuối năm, bằng cách di chuyển các tệp nhật ký cũ thay vì xóa / lưu trữ khỏi cơ sở dữ liệu

Xin vui lòng cho tôi biết nếu câu trả lời của tôi là sai; hoặc phóng đại tầm quan trọng của một cái gì đó; hoặc đã quên một số xem xét quan trọng.

Và / hoặc xin vui lòng cho tôi biết câu trả lời của bạn là gì, nếu nó khác với tôi.


3
Bạn cần tách biệt thông tin được sử dụng để đưa ra quyết định kinh doanh với thông tin đăng nhập chung. Lưu trữ bất cứ thứ gì sẽ được ứng dụng của bạn sử dụng trong cơ sở dữ liệu, những thứ khác trong tệp nhật ký.
tom

1
Nếu bạn đang sử dụng một gói nổi tiếng như log4net - và có lẽ đó sẽ là một ý tưởng tốt hơn là tự mình thực hiện - đó chỉ là vấn đề lật cấu hình để thực hiện. @tom - phân tách là tốt, nhưng tại sao không chỉ đơn giản là có hai cơ sở dữ liệu, một cho dữ liệu trực tiếp và một để lưu trữ nhật ký, v.v.?
Julia Hayward

2
OP nói rằng đó là thanh toán hàng tháng - vì vậy tôi đã dự kiến ​​áp dụng logic thanh toán cho db sẽ dễ dàng hơn nhiều so với các tệp phẳng?
Julia Hayward

1
Bạn đã sử dụng thuật ngữ "SQL" khi bạn có nghĩa là "cơ sở dữ liệu". Tôi đã thực hiện một số sửa chữa. SQL là ngôn ngữ bạn sử dụng để đọc và ghi vào cơ sở dữ liệu. MS SQL Server là tên của RDBMS. "SQL" không có nghĩa là "cơ sở dữ liệu MS SQL Server".
Tulains Córdova

1
@gnat Tôi không nghĩ đây là một bản sao: cái khác là về lỗi ghi nhật ký trong khi đây là về việc sử dụng ghi nhật ký để thanh toán (và trong trường hợp này, câu trả lời được nâng cấp và chấp nhận là sử dụng RDBMS).
ChrisW

Câu trả lời:


13

Vì bạn đang sử dụng thông tin này cho mục đích thanh toán, tôi không hiểu lý do tại sao bạn không muốn nó trong cơ sở dữ liệu nơi có thể dễ dàng truy vấn, tổng hợp, báo cáo và tham gia vào dữ liệu khác.

Tôi cũng nghĩ rằng việc duy trì một bảng cơ sở dữ liệu chứa thông tin nhật ký sẽ dễ dàng hơn nhiều so với một loạt các tệp nhật ký riêng biệt. Tương tự với mối quan tâm của bạn về tải trên máy chủ - có nhiều cách tốt hơn để xử lý vấn đề đó hơn là dùng đến việc giữ dữ liệu trong các tệp phẳng.

Nhân tiện, lựa chọn thứ ba của bạn là làm cả hai. Sử dụng cơ sở dữ liệu cho hầu hết các nhu cầu, nhưng có tệp nhật ký cho mục đích kiểm toán.


3
Một phần thưởng khác cho việc sử dụng cơ sở dữ liệu là sử dụng các kích hoạt để ghi nhật ký nhất định. Không có mã bổ sung sẽ là cần thiết. Nếu dữ liệu được chèn vào bảng A, sau đó chèn thông điệp tường trình X.
Greg Burghardt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.