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

我发现这个策略非常低效。即使我只是每天的基础上归档数据,行的数目将变得巨大,即使只有1或2个用户就在某一天更新。

下一个替换我能想到的是仅存储已更改的条目。这将意味着不必建立逻辑自动创建一个给定的一天中的视图。这意味着更少的存储行,但相当大的复杂度。

我的最终的想法是有点不太常规的。由于历史数据将会是报告的目的,没有必要为互联网用户快速访问。我在想,我的数据库可能在它的历史数据。 DB仅代表当前状态。然后,每日,整个分贝可以被装载到对象(用户数/数据是相对低的),然后序列化到像XML或JSON。这些文件可以与前一天进行显示差异和存储。事实上,SVN能为我做到这一点。当我想为一个给定的过去一天的数据,该系统具有检索版本的那一天和反序列化为对象。这显然是一个代价高昂的操作,但表现与其说这里关注的问题。我使用LINQ此,我认为会简化事情考虑。序列化的过程必须是非常有组织的差异很好地工作。

你会采取哪种方式?

由于

有帮助吗?

解决方案

所有你告诉我们你的系统,它涉及到选票。只要您存储时票数,你应该能够生成描述在任何时间点的投票状态理货报告...的时间戳没有?

举例来说,假设我有吻合喜欢的功能(眼睛,微笑,屁股,...)的系统。如果我想知道有多少票有特定功能的特定日期的,那我就简单地记下所有的选票与时间戳小于或等于该日期的功能。

如果你想有其他的事情病史,那么你会遵循类似的方法。

我觉得这是它做的方式。

“替代文字”

其他提示

如果你基本上知道如何资料修改存储在关系数据库中,然后我会看看维基百科是如何做到这一点。

wiki都关于保持详细的修订历史记录。它们使用简单的关系数据库以用于存储。

考虑维基百科的数据库模式

你有没有使用真正的版本控制系统,而不是试图鞋拔子在其位置数据库的考虑?我本人相当部分与git,但也有很多选择。他们都对版本之间的差异很好的支持,他们往往对这种工作量可以很好的优化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top