记录到MSMQ /文本文件/数据库的性能比较

rov*_*sen 5 .net logging enterprise-library msmq

我们有几种登录.NET(C#)服务器应用程序的选择.我们将使用企业库.所以这里有方法:

1)同步向MSMQ写入日志,然后用Win Service读取MSMQ.队列位于服务器应用程序的本地计算机上.
2)同步写入磁盘(即滚动文本文件).
3)同步将日志写入数据库(Oracle,在我们的应用程序中).

日志量可能相当高.那么哪一个是最高效的?我猜订单是1,2,3.我是对的吗?除了写入速度之外,在这种特定情况下还有其他性能因素吗?还有其他选择,我在这里没有指出,这可能是更好的方法吗?

p.c*_*ell 4

没有听到应用程序在日志记录方面的需求:

我感觉 MSMQ 日志记录场景对这个问题来说有点沉重。

MSMQ 肯定会更快,因为您的应用程序将使用网络通信协议,而不是处理磁盘延迟和数据库连接创建和拆除。但考虑到 MSMQ 使用磁盘,收益可能可以忽略不计。那么问题是 MSMQ 目标/目标队列是否在本地计算机上。

坚持磁盘日志记录

考虑坚持以适当的翻转(根据需要按天/小时)记录到磁盘上的文件。如果您非常关心主轴速度,有一些解决方法 - 考虑将这些日志文件写入 RAM 磁盘。然后,根据需要定期将这些文件从 RAM 复制到磁盘上。

衡量您的日志记录性能需求

听听有关过早优化的笑话。测量,再测量。在衡量解决方案的性能之前,您不会知道自己需要什么。假设您可能有 10,000rpm 的主轴,并且磁盘日志记录解决方案可能能够充分执行。如果决定跳到 MSMQ 或数据库写入等“外包”组件的复杂解决方案,则可能会出现一些 YAGNI 的情况。我这样说是为了满足您对速度的需求。