0

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

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

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

我的最终想法有点不那么传统。由于历史数据将用于报告目的,因此网络用户无需快速访问。我在想我的数据库中可能没有历史数据。DB 仅代表当前状态。然后,每天,整个数据库都可以加载到对象中(用户/数据的数量相对较少),然后序列化为 XML 或 JSON 之类的东西。这些文件可能与前一天不同并被存储。事实上,SVN 可以为我做到这一点。当我想要过去一天的数据时,系统必须检索当天的版本并反序列化为对象。这显然是一项代价高昂的操作,但这里的性能并不是那么重要。我正在考虑为此使用 LINQ,我认为这会简化事情。

你会采取哪种方法?

谢谢

4

3 回答 3

1

如果您基本上想知道数据的修订是如何存储在关系数据库中的,那么我会研究 wiki 是如何做到的。

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

考虑 Wikipedia 的数据库模式

于 2009-04-14T15:01:04.473 回答
0

您是否考虑过使用真正的版本控制系统,而不是试图硬塞一个数据库来代替它?我本人对 git 很偏爱,但是有很多选择。它们都对版本之间的差异有很好的支持,并且它们往往针对这种工作负载进行了很好的优化。

于 2009-04-14T07:04:06.240 回答
0

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

例如,假设我有一个系统可以记录最喜欢的特征(眼睛、微笑、屁股……)。如果我想知道某个特定功能在特定日期有多少票,那么我只需将时间戳小于或等于该日期的所有票数统计在该功能上即可。

如果您想了解其他事物的历史,那么您将遵循类似的方法。

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

替代文字

于 2009-04-14T14:18:29.800 回答