事务日志

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

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

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

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

事务开启日志

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

  1. Version: 0x00000001(1)
  2. LSN : 0x00000000000000ec(236)
  3. PreLSN : 0x000000000000009c(156)
  4. Length : 228
  5. ...
  6. TransID : 0x00040069d6d96e
  7. IDAttr Start

事务预提交日志

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

  1. Version: 0x00000001(1)
  2. LSN : 0x0000000058b90740(1488521024)
  3. PreLSN : 0x0000000058b906d0(1488520912)
  4. Length : 100
  5. Type : COMMIT(12)
  6. FirstLSN : 0x0000000058b90670
  7. Attr : 1(Pre-Commit)
  8. NodeNum : 1
  9. Nodes : [ (1001,1003) ]
  10. TransID : 0x000400727828cc
  11. IDAttr :
  12. TransPreLSN : 0x0000000058b906d0

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

Note:

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

事务提交日志

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

  1. Version: 0x00000001(1)
  2. LSN : 0x0000000058b907a4(1488521124)
  3. PreLSN : 0x0000000058b90740(1488521024)
  4. Length : 80
  5. Type : COMMIT(12)
  6. FirstLSN : 0x0000000058b90670
  7. Attr : 2(Commit)
  8. TransID : 0x000400727828cc
  9. IDAttr :
  10. TransPreLSN : 0x0000000058b90740

事务回滚日志

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

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