事务日志

SequoiaDB 中的事务日志记录了事务对数据库的所有更改,是备份和恢复的重要组件,同时也被用于事务操作中用于回滚数据。因此事务日志中通常包含 REDO 和 UNDO 两部分,其中 REDO 部分用于数据恢复和复制组节点间数据进行增量同步,UNDO 部分用于事务回滚操作恢复数据到事务操作前的状态。

如更新操作的事务日志中,将分别记录新值(New)和旧值(Orig):

 Version: 0x00000001(1)
 LSN    : 0x0000000058b90740(236)
 PreLSN : 0x0000000058b906d0(156)
 Length : 228
 Type   : UPDATE(2)
 FullName : sample.employee
 Orig id : { "_id": { "$oid": "5c88afe31a3f5822754040d0" } }
 Orig    : { "$set" : { "balance" : 10000 } }
 New id  : { "_id": { "$oid": "5c88afe31a3f5822754040d0" } }
 New     : { "$set" : { "balance" : 8000 } }
 TransID : 0x00040069d6d96e
 TransPreLSN : 0x0000000058b906d0

如果事务日志的记录中有事务 ID(TransID) 表示该日志记录是某个事务的事务日志,同一个事务的事务日志有相同的事务 ID。可以通过 TransPreLSN 查找同一个事务的前一条事务日志。

事务开启日志

事务日志中事务开启日志和事务的第一个操作合并,事务日志的事务 ID(IDAttr)带有 Start 标签的事务日志为事务的开启日志,即事务的第一个操作。

 Version: 0x00000001(1)
 LSN    : 0x00000000000000ec(236)
 PreLSN : 0x000000000000009c(156)
 Length : 228
 ...
 TransID : 0x00040069d6d96e
 IDAttr  :Start

事务预提交日志

事务的预提交日志表示事务将进入 WAIT-COMMIT 状态:

 Version: 0x00000001(1)
 LSN    : 0x0000000058b90740(1488521024)
 PreLSN : 0x0000000058b906d0(1488520912)
 Length : 100
 Type   : COMMIT(12)
 FirstLSN : 0x0000000058b90670
 Attr     : 1(Pre-Commit)
 NodeNum  : 1
 Nodes    : [ (1001,1003) ]
 TransID  : 0x000400727828cc
 IDAttr   :
 TransPreLSN : 0x0000000058b906d0

其中,事务日志中 Nodes 将标明参与事务的数据节点,用于两阶段协议出错时节点间进行协商。

Note:

SequoiaDB 分布式事务的两阶段提交协议可参考两阶段提交

事务提交日志

事务的提交日志表示事务已经提交:

 Version: 0x00000001(1)
 LSN    : 0x0000000058b907a4(1488521124)
 PreLSN : 0x0000000058b90740(1488521024)
 Length : 80
 Type   : COMMIT(12)
 FirstLSN : 0x0000000058b90670
 Attr     : 2(Commit)
 TransID  : 0x000400727828cc
 IDAttr   :
 TransPreLSN : 0x0000000058b90740

事务回滚日志

事务回滚日志与事务之前的操作日志一一对应,事务 ID(IDAttr)带有 Rollback 标签:

  • 对于更新操作,新值(New)和旧值(Orig)与原事务日志互换
  • 对于插入操作,将产生删除操作的事务日志
  • 对于删除操作,将产生插入操作的事务日志
 Version: 0x00000001(1)
 LSN    : 0x0000000058b90740(236)
 PreLSN : 0x0000000058b906d0(156)
 Length : 228
 Type   : UPDATE(2)
 FullName :sample.employee
 Orig id : { "_id": { "$oid": "5c88afe31a3f5822754040d0" } }
 Orig    : { "$set" : { "balance" : 8000 } }
 New id  : { "_id": { "$oid": "5c88afe31a3f5822754040d0" } }
 New     : { "$set" : { "balance" : 10000 } }
 TransID : 0x00040069d6d96e
 IDAttr  : Rollback
 TransPreLSN : 0x0000000058b906d0
回到顶部