2010-02-22 36 views
5

Chúng tôi có một số lựa chọn để đăng nhập vào ứng dụng máy chủ .NET (C#) của chúng tôi. Chúng tôi sẽ sử dụng Thư viện doanh nghiệp. Vì vậy, đây là các cách để đi:So sánh hiệu suất để ghi vào MSMQ/tệp văn bản/cơ sở dữ liệu

1) Viết nhật ký MSMQ đồng bộ, sau đó đọc MSMQ bằng Dịch vụ giành chiến thắng. Hàng đợi là trên máy địa phương cho ứng dụng máy chủ.
2) Ghi nhật ký vào đĩa (tức là các tệp văn bản cuộn) đồng bộ.
3) Ghi nhật ký vào cơ sở dữ liệu (Oracle, trong ứng dụng của chúng tôi) đồng bộ.

Số tiền nhật ký có thể khá cao. Vậy ai là người biểu diễn nhất? Tôi đoán thứ tự là 1, 2, 3. Tôi có đúng không? Có yếu tố hiệu suất nào khác ngoài tốc độ ghi, trong kịch bản cụ thể này? Có bất kỳ lựa chọn nào khác, rằng tôi đã không chỉ ra ở đây, đó có thể là cách tốt hơn?

Trả lời

4

khi không có phản ứng nhu cầu của ứng dụng về khai thác gỗ:

Tôi có cảm giác rằng kịch bản khai thác gỗ MSMQ là một chút của một cái búa lớn cho vấn đề.

MSMQ chắc chắn sẽ nhanh hơn, vì ứng dụng của bạn sẽ sử dụng giao thức truyền thông mạng thay vì xử lý độ trễ đĩa và tạo kết nối DB & xé xuống. Mặc dù, MSMQ sử dụng đĩa, mức tăng có thể không đáng kể. Câu hỏi đặt ra là liệu hàng đợi đích/đích của MSMQ có nằm trên máy cục bộ hay không.

Stick với đĩa Logging

Hãy xem xét gắn bó với khai thác gỗ vào một tập tin trên đĩa với hiệu ứng Rollover thích hợp (ngày/giờ theo yêu cầu). Có một số cách giải quyết nếu bạn đang quan tâm đến tốc độ trục chính - hãy xem xét viết các tệp nhật ký đó vào một đĩa RAM. Sau đó có một quá trình để sao chép các tập tin đó ra khỏi RAM và vào đĩa định kỳ như bạn thấy phù hợp.

Đo Hiệu suất Logging bạn Nhu cầu

Cue những câu nói đùa về tối ưu hóa quá sớm. Đo lường và đo lại. Bạn chỉ sẽ không biết những gì bạn cần cho đến khi bạn đánh giá như thế nào giải pháp của bạn đang thực hiện. Hãy xem xét rằng bạn có thể có 10.000rpm cọc, và có khả năng một giải pháp ghi đĩa sẽ thực hiện đầy đủ. Một chút YAGNI có thể leo lên nếu quyết định là chuyển sang giải pháp phức tạp của một thành phần 'bên ngoài' như MSMQ hoặc một cơ sở dữ liệu viết. Tôi nói điều này với nhu cầu đã nói của bạn về tốc độ.

+0

Xin chào, cảm ơn câu trả lời. Đã cập nhật câu hỏi liên quan đến "mục tiêu MSMQ/hàng đợi đích". – rovsen

1

Tôi nghĩ bạn nên cân nhắc "Ghi nhật ký vào cơ sở dữ liệu không đồng bộ". tức là đối với mỗi mục bạn muốn đăng nhập, hãy xếp hàng trong bộ nhớ và có một chuỗi riêng biệt ghi vào cơ sở dữ liệu. Không có ý nghĩa giữ ứng dụng chính đang chờ đăng nhập để hoàn thành cung cấp thứ tự của các thông điệp đăng nhập được duy trì bởi cơ chế xếp hàng.

Ngoài ra, bạn có nhìn vào log4net không? Nó bao gồm nhiều tùy chọn ghi nhật ký bao gồm nhật ký xoay mạnh vào đĩa, ghi nhật ký UDP, ....

Bạn cũng có thể muốn xem Splunk như một cách để tìm kiếm tệp nhật ký của mình sau khi tạo chúng.

1

Bạn xếp hạng MSMQ, Tệp và DB phải chính xác trong các trường hợp điển hình.

Tôi biết bạn lo ngại về hiệu suất nhưng tôi chưa gặp phải tình huống trong một dòng ứng dụng doanh nghiệp mà tôi đã hối tiếc cơ chế ghi nhật ký được sử dụng.Khi so sánh với lượng thời gian dành cho việc thực hiện logic nghiệp vụ, thời gian ghi nhật ký không chỉ đáng kể.

Ngoài ra, nếu bạn thực sự lo lắng về hiệu suất, bạn có thể muốn điều tra các tùy chọn khác ngoài Thư viện doanh nghiệp. ví dụ. log4net có lịch sử chạy nhanh hơn.

Ngoài hiệu suất, tôi cũng sẽ xem xét các yêu cầu khác. ví dụ. Bạn có cần báo cáo hoặc truy vấn trên nhật ký không? Bạn có yêu cầu một kho lưu trữ log trung tâm (hay nó sẽ hữu ích)? Nếu câu trả lời cho bất kỳ câu hỏi nào là có, thì có thể bạn sẽ muốn đi với một cơ sở dữ liệu hoặc MSMQ cho ăn một cơ sở dữ liệu.

Các cân nhắc khác có thể là hiện thực hoặc tiêu chuẩn, độ phức tạp của giải pháp tổng thể (MSMQ> tệp), khả năng hỗ trợ của các tùy chọn khác nhau (ví dụ: bạn có thể không muốn sử dụng MSMQ nếu không có chuyên môn hoạt động).

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