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