【问题标题】:Table Structure for versioning data版本控制数据的表结构
【发布时间】:2011-05-06 21:56:18
【问题描述】:

我有一个表来存储手机的数据,它有大约 50 列 .... 一年内应该平均插入 3000 万部手机 .......... 但是,有必要存储这些电话的历史记录,例如,如果我想在给定日期更改电话中的字段,稍后我需要在任何给定时间知道该电话的值。 我突然想到有一个历史表和一个主表,在主表中,我有单元格的最新值,并且在历史中所做的所有更改。现在这是重复数据,因为如果您只更改一个字段,我会将所有值插入到历史表中,即使是那些未更改的值,并且主要是最后一条记录,因此历史表将大大增加。 我怎样才能设法不存储太多可能无法更改的信息并在任何给定时间从手机中检索数据?

【问题讨论】:

    标签: database data-structures versioning


    【解决方案1】:

    如果您希望能够轻松查询历史数据,那么我会复制。通过触发器复制到历史表,或者如果系统停机,则创建一个带有 ID 和时间戳唯一约束的表,并在停机期间使用计划的批处理将旧数据移出。例如,这些较旧的数据将存在于其他地方,可以被压缩和/或从主磁盘移出到磁带备份。

    另一方面,正如您在问题中所建议的那样,您可以单独对每个字段进行版本控制 - 并且只对那些更改的字段进行版本控制 - 这将需要更少的存储空间,但在给定的时间点重建数据更多地涉及到我可能不会使用 SQL,而是依赖于编程语言。

    【讨论】:

      【解决方案2】:

      根据您的描述,您似乎需要在每次更新/插入之前查询历史数据,以检查之前是否使用过手机详细信息。在这种情况下,您不能只是将历史数据移到其他地方,就像之前建议的那样,您需要让它们永远存在。 为访问历史表的查询获得合理性能的一种可能方法就是在问题上投入更多的硬件 - 将存档表中的数据分区到尽可能多的物理驱动器上。

      【讨论】:

      • 不,这个问题从来没有说明每次更改都需要查询历史数据,而是能够了解过去任何给定时间点的状态。所以是的,历史数据可以转移到其他地方,只要它可以在以后用于恢复旧状态。
      • 好吧,也许我误解了这部分:“如果我想在给定日期更改手机中的字段,那么我需要在任何给定时间知道该手机的值。”
      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 2010-11-20
      • 2010-09-06
      • 1970-01-01
      • 2011-02-25
      • 2018-08-09
      • 1970-01-01
      • 2019-01-15
      相关资源
      最近更新 更多