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


日志和异常不属于业务范围,因此它们不需要
在主数据库中。
主数据库上的负载将减少,从而导致更好的性能。


缺点是:


如果日志数据库停止,我们将丢失非常重要的日志
在这个项目中。 (尽管如果没有记录,我们可以防止保存
成功)
处理交易将很困难。 (如果保存了日志,但是数据
不是)


当然,还有更多的优点和缺点,但总而言之,我需要知道:在使用大型事务性RDBMS的企业软件中,最佳实践是什么?
还是基于某些因素,项目之间会有所不同?

最佳答案

您想将错误日志记录与数据访问分开并分离。如果数据访问回滚,则要保留日志访问并记录其回滚的事实。如果数据库已关闭,则确实要记录该数据库已关闭。如果您的日志记录与数据访问在事务上保持一致,则您的系统可能会每分钟经历10次回滚,而您的错误日志将不显示任何内容!

日志记录应成为其自己的存储(数据库)的另一个原因是,这种关系通常不是1:1的关系,错误日志记录通常会汇总从多个系统报告的错误,并可能由多个数据库支持。

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

10-01 05:28
查看更多