我计划在新的网络项目中使用log4net
。根据我的经验,我看到日志表有多大,我也注意到错误或异常都会重复。例如,我只查询一个记录超过132.000条记录的日志表,并且我使用distinct,发现只有2.500条记录是唯一的(~2%),其他记录(~98%)只是重复记录。所以,我想出了改善日志记录的想法。
有几个新列:counter
和updated_dt
,每次尝试插入相同记录时都会更新。
如果要跟踪导致异常的用户,需要创建user_log
或log_user表,以映射N-N关系。
创建这个模型可能会使系统变得缓慢而低效,试图比较所有这些长文本......这里的诀窍,我们还应该有一个16或32的二进制hash column
,它将消息和异常,并在其上配置索引。我们可以使用HASHBYTES
来帮助我们。
我不是数据库专家,但我认为这将更快地找到类似的记录。而且由于散列不保证唯一性,有助于更快地定位那些类似的记录,然后直接通过消息或异常进行比较以确保它们是唯一的。
这是一个理论/实践解决方案,但它会起作用还是带来更多复杂性?我要遗漏哪些方面或需要考虑哪些因素?触发器将完成插入或更新的工作,但触发器是最好的方法吗?
答案 0 :(得分:1)
是的,你可以这样做。这是一个好主意,它会起作用。从多个线程或进程插入时,请注意并发问题。您可能需要详细调查锁定。您应该查看锁定提示(在您的情况下为UPDLOCK, HOLDLOCK, ROWLOCK
)和MERGE
语句。它们可用于维护维度表。
作为替代方案,您可以登录到文件并进行压缩。典型的压缩算法非常擅长消除这种类型的精确冗余。
答案 1 :(得分:1)
我不会过于关注132,000条记录的日志表,说实话,我在日志表中看到了数百万条记录,甚至数十亿条记录。如果您每几分钟注销132,000条记录,那么您可能需要稍微调整一下。
我认为这个想法很有意思,但这是我的主要关注点:
思想?