【发布时间】:2009-04-26 09:51:47
【问题描述】:
我正在为中型企业设计一个 Intranet 系统。我应该为所有模块保留一个日志表还是分开?
审核日志保存所有管理员/员工活动(创建、更新、删除对象),并且日志结构对于任何类型的模块都是通用的。
如果我根据日志记录提取报告也是一个好主意吗?我的日志表保留了对象类型和对象 ID,因此我可以随时根据事件、对象名称和对象 ID 获取任何对象的数据。
在这种情况下报告的最佳方法是什么?
【问题讨论】:
我正在为中型企业设计一个 Intranet 系统。我应该为所有模块保留一个日志表还是分开?
审核日志保存所有管理员/员工活动(创建、更新、删除对象),并且日志结构对于任何类型的模块都是通用的。
如果我根据日志记录提取报告也是一个好主意吗?我的日志表保留了对象类型和对象 ID,因此我可以随时根据事件、对象名称和对象 ID 获取任何对象的数据。
在这种情况下报告的最佳方法是什么?
【问题讨论】:
我会说一张桌子。
例如,您可能希望在所有模块中查找用户活动(如果我理解正确的话)。这适合一张桌子。
报告您的日志表是可以的。您可以将负载卸载到单独的报告数据库中,以减少日志记录表上的争用和负载。
最后,我将明确存储对象名称和类型(数据库对象)。 如果你 DROP 和 CREATE 那么 ID 将会改变。或者一个表可能会变成一个视图,例如,它的类型和 objectid 都会改变。
【讨论】:
好吧,当你去查看你的日志时,你更愿意在一个可以看到所有内容的地方查看,还是必须检查几个不同的地方,每个地方都只显示一个孤立的系统?
请记住,对于单个表,过滤掉不相关的条目或用户无权查看的条目是微不足道的。将多个单独的日志组合到一个单一的综合视图中有点棘手,而且它还有一个额外的缺点,在大多数设计下,每次添加新的日志表时都需要重新访问执行组合的代码。
我肯定说单个日志更可取。我能想到的唯一适合多个隔离日志的情况是,如果安全问题足够强大,以至于必须对具有不同可见性的日志条目进行物理隔离 - 在这种情况下,您可能会单独查看日志服务器,而不仅仅是单独的表。
【讨论】:
我们使用单表,它被证明是最好的解决方案,尤其是在性能方面。尤其是对于大型数据集。如果您对现成的解决方案感兴趣 - 请尝试this。
【讨论】: