单独的数据库来存储日志和异常

时间:2012-10-30 07:59:32

标签: sql-server logging rdbms nlog elmah

在企业项目中,我需要记录大量数据(原始值,修改值,更改数据的用户等) 我正在使用NLog来记录这些数据,使用ELMAH来记录异常。 我不确定是否使用单独的数据库来存储日志记录信息或使用主数据库。 使用单独数据库的优点是:

  • 日志和例外不是业务的一部分,因此他们不需要 在主数据库中。
  • 主数据库上的负载会减少,从而产生更好的性能。

缺点是:

  • 如果日志数据库停止,我们将错过非常重要的日志 在这个项目中。 (虽然如果没有记录,我们可以阻止保存 成功的)
  • 处理交易会很困难。 (如果保存日志,但数据如何 不是)

当然还有更多优点和缺点,但总而言之,我需要知道:使用大型事务RDBMS的企业软件的最佳实践是什么? 或者根据某些因素,它可能因项目而异;

1 个答案:

答案 0 :(得分:6)

您希望将错误日志记录与数据访问分开并分离。如果数据访问回滚,您希望保持日志访问记录其回滚的事实。如果数据库已关闭,您需要记录数据库 的结果。如果您的日志记录与数据访问在事务上是一致的,那么您的系统可能会在一分钟内遇到10次回滚,但您的错误日志将不显示!

日志记录应该是自己的存储(数据库)的另一个原因是,关系通常不是1:1,错误日志记录通常聚合从多个系统报告的错误,可能由多个数据库支持。

用于提交错误报告的基础结构应该处理错误日志存储库的不可用性(即,日志记录数据库已关闭或网络已分区),请使用可用的众多排队解决方案之一(MSMQ,{{3 },RabbitMQ等。)