版本控制的数据库有效地使用diff

问题描述 投票:0回答:3

我有一个涉及网络投票系统的项目。当前值和相关数据存储在多个表中。历史数据将是该项目的一个重要方面,因此我还创建了审计表,当前数据将定期移至该审计表。

我发现这种策略非常低效。即使我每天只存档数据,即使只有1或2个用户在某一天进行更新,行数也会变得很大。

我能想到的下一个选择是仅存储已更改的条目。这意味着必须构建逻辑以自动创建给定日期的视图。这意味着存储的行数较少,但相当复杂。

我的最终想法不那么传统。由于历史数据将用于报告目的,因此网络用户无需快速访问。我在想我的数据库中没有历史数据。 DB仅表示当前状态。然后,每天,整个数据库可以加载到对象(用户/数据的数量相对较低),然后序列化为XML或JSON。这些文件可以与前一天进行差异并存储。事实上,SVN可以为我做这件事。当我想要过去某天的数据时,系统必须检索当天的版本并反序列化为对象。这显然是一项代价高昂的操作,但性能并不是一个值得关注的问题。我正在考虑使用LINQ,我认为这会简化事情。序列化过程必须非常有条理,才能使diff运行良好。

你会采取哪种方法?

谢谢

database versioning relational-database
3个回答
0
投票

所有你告诉我们的关于你的系统的是它涉及投票。只要您存储投票时间的时间戳,您就应该能够在任何时间点生成描述投票状态记录的报告......不是吗?

例如,假设我有一个系统可以计算出最喜欢的功能(眼睛,微笑,屁股......)。如果我想知道特定日期的特定功能有多少票,那么我只需将该时间戳小于或等于该日期的所有选票统计。

如果你想了解其他事物的历史,那么你会采用类似的方法。

我认为这就是它的完成方式。

alt text


1
投票

如果你基本上想知道如何在关系数据库中存储数据的修改,那么我将研究wiki如何做到这一点。

Wikis都是关于保留详细的修订历史记录。他们使用简单的关系数据库进行存储。

考虑维基百科的数据库schema


0
投票

您是否考虑使用真正的版本控制系统而不是试图在其位置上窃取数据库?我自己对git非常偏爱,但有很多选择。它们都对版本之间的差异有很好的支持,并且它们往往针对这种工作负载进行了很好的优化。

© www.soinside.com 2019 - 2024. All rights reserved.