我有一个涉及网络投票系统的项目。当前值和相关数据存储在多个表中。历史数据将是该项目的一个重要方面,因此我还创建了审计表,当前数据将定期移至该审计表。
我发现这种策略非常低效。即使我每天只存档数据,即使只有1或2个用户在某一天进行更新,行数也会变得很大。
我能想到的下一个选择是仅存储已更改的条目。这意味着必须构建逻辑以自动创建给定日期的视图。这意味着存储的行数较少,但相当复杂。
我的最终想法不那么传统。由于历史数据将用于报告目的,因此网络用户无需快速访问。我在想我的数据库中没有历史数据。 DB仅表示当前状态。然后,每天,整个数据库可以加载到对象(用户/数据的数量相对较低),然后序列化为XML或JSON。这些文件可以与前一天进行差异并存储。事实上,SVN可以为我做这件事。当我想要过去某天的数据时,系统必须检索当天的版本并反序列化为对象。这显然是一项代价高昂的操作,但性能并不是一个值得关注的问题。我正在考虑使用LINQ,我认为这会简化事情。序列化过程必须非常有条理,才能使差异很好地工作。
你会采取哪种方式?
由于
答案 0 :(得分:1)
如果您基本上想知道如何在关系数据库中存储数据修订,那么我将研究wiki如何做到这一点。
Wiki完全是关于保留详细的修订历史记录。他们使用简单的关系数据库进行存储。
考虑维基百科的数据库schema。
答案 1 :(得分:0)
您是否考虑过使用真正的版本控制系统,而不是试图在其位置上窃取数据库?我自己对git非常偏爱,但有很多选择。它们都对版本之间的差异有很好的支持,并且它们往往针对这种工作负载进行了很好的优化。
答案 2 :(得分:0)