【问题标题】:Version control repository for user data用户数据的版本控制存储库
【发布时间】:2010-12-05 01:53:22
【问题描述】:

关于如何对我的 mysql 架构建模以在版本控制下存储用户内容的工具或指南?类似于 svn 存储库,但我需要对所有用户对象进行版本控制,而不是代码。就像用户 2 年前在这个日期拍摄的照片一样。他有什么设置,等等。是的,我可以将备份副本存储在表中,但问题是由于不同类型的对象,涉及成百上千个表。我现在每天都会拍摄照片,并计划在以后的每次编辑中实现它。所以基本上我想知道 svn 存储库如何在数据库中存储内容,或者 Windows 如何在某些数据库中存储还原点,这样我就可以为用户数据模拟该模型。对我来说唯一的要求是我需要使用 mysql 作为主数据库。我的看法是:

活动数据和历史数据。活动数据具有当前副本。历史数据按日期/时间编制索引。但仍然每天为每个用户维护数百个表数据,这意味着 365 x 用户数 x 我需要版本的表行数。我不知道在 3NF 中将它放入 mysql 是否是最好的方法?

【问题讨论】:

  • 似乎您需要先重构数据库的方案。你能告诉我们目前的方案吗?

标签: mysql version-control repository


【解决方案1】:

您可以简单地在每个数据库条目中添加一个 timpstamp 字段。然后进行延迟删除而不是删除数据,即有一个“已删除”字段,它再次可以存储删除的时间戳。这些组合将允许您进行历史查询。

当您从历史快照中实现这一点时,您可以根据您在其中看到条目的第一个/最后一个快照来估计时间戳,并相应地修改数据库条目。

【讨论】:

  • 那么如何控制表格呢?以您的个人资料详细信息为例。它在 10 个表中有 50 个字段。我拍摄了 365 天的快照,我有 1000 万用户。所以 1 年后我将有 30 亿和 6.5 亿行每张表?
  • 只有在发生更改时才存储新行。通常一天不到一次。
【解决方案2】:

版本控制是一个重要的问题。它已通过多种方式解决,但自己正确重做绝非易事。 Eric Sink 写了一篇非常好的博客,介绍了他自己的版本控制软件的开发,其中对复杂性有一些了解

您的特殊问题将是数据量,因为您的许多文件将是二进制文件,VC 系统无法有效地存储它们,因为它们主要用于处理文本。很快,除非你有一个非常好的差异引擎,否则你最终会处理太多数据。

我的建议是专注于将您的软件与某人已经完成了艰苦工作的东西进行交互,例如 Subversion、Git、Mercurial 或其他可用的优秀源代码控制工具之一。您可以将它们用作您的存储库来存储和版本化所有文件,并在其上构建您的软件以理解这一切。

要构建高效的版本控制系统,您需要真正了解自己在做什么,为什么不重用专家创建的内容。

如果你仍然热衷于自己做,你可能会比Eric Sinks Source Control How-To做得更糟

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2014-05-13
    • 2011-08-29
    相关资源
    最近更新 更多