首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储审计存储

存储审计存储
EN

Stack Overflow用户
提问于 2011-06-28 19:25:29
回答 2查看 120关注 0票数 0

为了用于审计目的存储审计条目,我一直在思考如何记录哪些数据已经更改。

我过去做过两种不同的方法,但是现在我正在创建一个新的系统,并试图找出使用哪种方法:

  1. 有一个AuditEntry和AuditEntryChange表。每个更改的字段值都在AuditEntryChange表中,并有一个FK到AuditEntry。
  2. 将更改的字段和值存储在AuditEntry表中的单个字段中。

以上哪一个更适合保存和查询?(如果使用XML,包括序列化/反序列化的影响)。哪一个会占用更少的空间?

另外,使用GUID或int进行审计表的最佳实践是什么?我能想出每一个理由。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-28 20:19:02

答案取决于您计划如何查询审计表。审计表需要考虑的问题是,在典型的场景中,记录是只读的,插入的频率比查询的要高得多。

我倾向于选择方案2,原因如下:

  • 插入单行比插入具有外键约束的多行要快。
  • 拥有XML字段在审计数据的结构方面提供了很大的灵活性,而无需担心数据库模式。
  • Server可以使用XPath语法查询XML列,因此仍然可以具有一些关系查询功能。
  • 选择许多记录(例如在表单中显示)也更快,因为没有联接。
  • 该模型可以方便地移植,不需要NoSQL存储。
  • 只有在从代码插入或加载回代码时才会涉及XML序列化。您仍然可以通过SQL直接查询XML列。
  • 我假设空间需求会增加,尽管这取决于关系模型可能产生的索引的大小。

对于int和Guid的审计表,我会使用Guid,因为:

  • 如果使用ORM (如NHibernate )插入,则在插入后没有选择以检索生成的ID。您可以高效地批量插入。
  • 虽然guid比guid大4倍,但对于100万条记录来说,这会导致大约10 MB的差异。这真的是个问题吗?特别是因为它不太可能由PK查询审计日志。
  • 移植到其他数据库或存储机制更容易。
票数 1
EN

Stack Overflow用户

发布于 2011-06-28 19:31:43

就个人而言,对于报告来说,将每个字段都包含在数据库中要容易得多。

GUID与整数取决于表中有多少记录。对于GUID,整数需要4个字节对16个字节。如果您希望进行跨服务器部署,则GUID要容易得多。

这是一篇很好的关于职业选手和骗子的文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6512026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档