什么样的场景不需要像 Oracle 的重做 日志,而是需要在数据库中存储相同数据的多个版本?
专门来看这个例子,为什么我需要在我的数据库中存储多个版本的 html 页面?它不能作为备份,因为无论如何所有版本都不存在,只有其中一些版本存在(比如最后 5 个)。
BigTable 和类似的非关系存储要认识到的一件事是它们具有完全不同的一致性模型。
一旦引入了跨多个节点分布数据的概念,就会冒着一致性错误的风险。分布式数据库预计能够从节点关闭导致的不一致结果中恢复,而无需关闭数据库或执行被视为“恢复”的操作。
假设您有一条记录存储在节点“A”和“B”中。在“多主”复制中,您没有主副本和副本的概念。相反,可以同时在两个节点中更新记录(特别是如果两个节点之间的通信中断)。版本控制可以帮助解决由此产生的一致性问题。
此外,这些数据库往往不会进行“删除”。您只需存储标记为已删除(或过期或其他)的较新版本。类似地,“回滚”是从较早的记录创建更新版本的记录。
案例:
您想知道 daa 在过去发生了怎样的变化。示例:在整个流程中跟踪订单状态。即使客户搬家也能追踪他们的地址。
这可以是业务要求,也可以是 - 实际上 - 法律要求。很多时候两者兼而有之。
专门来看这个例子,为什么我需要在我的数据库中存储多个版本的 html 页面?
如果您想恢复到以前的版本。
对于跟踪审计/更改日志的更改也很有用(即使您无法还原,您至少可以看到谁更改了什么时间)。
您是否知道(除了重做日志)Oracle 还存储相同数据的先前版本(在撤消表空间中)?这称为多版本并发控制并允许无锁选择(您可以选择正在被正在进行的事务更改的行的先前值,而无需等待新数据提交)。
什么情况:“按原样”检索数据视图——这对于诊断非常有用(即能够使用相同的数据重新运行进程,而无需恢复整个数据库)。有关在短时间内执行此操作的方法,请参阅 Oracle 的闪回查询。
我们有这样一种情况,客户在现场对业务规则进行软编码,并存储在数据库中。它们可能随时更改,但用于计算存储的数据。对配置进行版本控制为我们提供了一种“回滚”配置并了解数据是如何派生的方法。
(我不记得 Oracle 内置行版本控制的具体术语,它有效地为每个表存储一个历史表)。
是的,版本控制意味着更多的存储空间,但我想说的是,在它有用的地方,数据很少是易失的。