代码之家  ›  专栏  ›  技术社区  ›  Moeb

什么情况需要我在数据库中存储相同数据的不同版本?

  •  2
  • Moeb  · 技术社区  · 15 年前

    这是从 Google BigTable paper

    alt text

    redo logs ,我需要存储 同一数据的多个版本 在内部 数据库

    具体到这个例子,为什么我需要在我的数据库中存储一个html页面的多个版本?它不能作为备份,因为无论如何,所有的版本都不存在,只有一些版本存在(比如最后5个版本)。

    6 回复  |  直到 15 年前
        1
  •  2
  •   TomTom    15 年前

    案例:

    你想知道daa在过去发生了什么变化。示例:在流程中跟踪订单状态。跟踪客户地址,即使他们搬家了。

    这可以是一项业务要求,也可以是一项法律要求。通常两者都有。

        2
  •  3
  •   Gary Myers    15 年前

    一旦引入跨多个节点分发数据的概念,就有可能出现一致性错误。分布式数据库有望从节点关闭导致的不一致结果中恢复,而无需关闭数据库或执行所谓的“恢复”。

    假设有一条记录存储在节点“a”和“B”中。在“多主机”复制中,您没有主副本和副本的概念。相反,在两个节点中同时更新记录是可能的(特别是当两个节点之间的通信中断时)。版本控制可以帮助解决由此产生的一致性问题。

        3
  •  1
  •   OMG Ponies    15 年前

    以防您要恢复到以前的版本。

        4
  •  1
  •   Michael Shimmins    15 年前

    对于跟踪审核/更改日志的更改也很有用(即使您无法还原,您至少可以看到谁在何时更改了什么)。

        5
  •  1
  •   Thilo    15 年前

    您知道(除了重做日志之外)Oracle还存储相同数据的早期版本(在undo表空间中)?这称为多版本并发控制,允许无锁选择(您可以选择正在进行的事务更改的行的上一个值,而不必等待新数据提交)。

        6
  •  1
  •   JulesLt    15 年前

    什么情况:检索“原样”的数据视图-这对于诊断非常有用(即能够使用相同的数据重新运行流程,而无需恢复整个数据库)。请参阅Oracle的Flashback查询,了解在短时间内实现这一点的方法。

    我们的情况是,业务规则由客户现场软编码,并存储在数据库中。它们可以随时更改,但用于计算存储的数据。对配置进行版本控制为我们提供了一种“回滚”配置并了解数据是如何派生的方法。

    (我想不起Oracle内置行版本控制的具体术语了,它为每个表有效地存储了一个历史表)。

    是的,版本控制意味着更多的存储空间,但我要说的是,在有用的地方,数据很少是易变的。

    推荐文章