【问题标题】:What would you log in a write-ahead log?你会在预写日志中记录什么?
【发布时间】:2011-07-09 17:23:51
【问题描述】:

为并发控制实现多版本时间戳排序的 DBMS 通常在其预写日志中包含哪些内容?之前和之后的图像,还是其中之一?时间戳?还有什么?

【问题讨论】:

  • 选择一个实现并查看技术文档? Postgres 使用 MVCC 的一种形式,并且有相当详细的文档 IIRC ...不确定 Firebird 或其他可以插入的开放引擎。

标签: database logging mvcc


【解决方案1】:

Documentation of Postgres WAL。 Postgres 使用 MVTO 类型的 MVCC。 InnoDB 使用 MVRC。

这里是Postgres log structurepg_control structure,这对恢复很重要。时间戳不被使用,因为它不可靠,而是使用单调递增的整数计数器(事务 id)。

所以所有与回滚相关的数据都存储在主数据本身中,而不是在 WAL 中。

WAL 的主要目的是在由于电源故障、操作系统问题或某些硬件故障(显然除了严重的磁盘故障除外)引起的问题时恢复数据。所以 WAL 应该几乎独立于它。

Innodb 日志结构在 innodb/include/log0log.h 中。

【讨论】:

  • @Zimbabo:谢谢!你知道 MVTO 和 MVRC 的区别吗?
  • 在您之前回答的问题中,我给了您一个链接 (simpledbm.googlecode.com/files/mvcc-survey-1.0.pdf)。这解释了 MVCC 的算法,postgres 使用 MVTO 和 InnoDB/Oracle 使用 MVRC。
  • @Zimbabao,链接是 404ed
【解决方案2】:

谢谢你。 我发现这篇文章是迄今为止最好的文章之一: http://answers.oreilly.com/topic/2035-whats-new-in-sqlite-37/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 2020-08-16
  • 2016-08-02
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
相关资源
最近更新 更多