TiDB 处理各种灾难故障可谓轻车熟路,但是常言道“天灾易躲,人祸难防”,对于各种误操作、bug 写入错误数据、甚至删库跑路,目前还没什么招。我们项目最初也是为了处理这些“意料之外”的事故。项目最初的名字叫 TiDB Flashback,后来又觉得这个名字过于贫瘠,无法体现项目内容的优越性,后来索性改成了“MVCC 时光机”。 ——渡渡鸟复兴会战队
一个非常 smart 和轻量级的实现,效果很不错,期待尽快发布上线。 ——评委冯光普 这个项目是给运维同学在某些时候救命的功能。它通过 SQL 很好地解决了运维的操作问题。更赞的是,该项目引入了多 Safepoint 机制,也就是可以给 TiDB 集群定期做一些全局 Snapshot,进行快速轻量级的逻辑备份。 ——评委唐刘
关于项目
天灾易躲,人祸难防
Make MVCC Great Again!
很可能需要排查数据损坏的情况,目前只能指定 ts 去读一个时间点的数据,要查看某条记录的变化历史太麻烦 RECOVER TABLE 只能恢复 DROP/TRUNCATE 这种 DDL 操作,对 DML 没招 GC Safepoint 之前的数据恢复不了,如果想保留长时间的数据,又太费空间了 恢复数据要先把数据 dump 出来再重新写入,太慢了

关于比赛
如何制造一个时光机?
谁掌握了过去,谁就掌握了未来;谁掌握了现在,谁就掌握过去。 ——乔治·奥威尔《1984》
参考 _tidb_rowid 的实现,增加 _tidb_mvcc_ts ,_tidb_mvcc_op 虚拟列。 当查询虚拟列时,TiDB 发送给 TiKV 的请求中要带上标记,指明要查询 MVCC 虚拟列。 修改 TiKV 的 MVCC 读取逻辑,当需要查询虚拟列时,需要扫描所有版本,而不是只扫描最新版本。然后设置每条数据对应的虚拟列值。 _tidb_mvcc_ts 为事务的 commit_ts , _tidb_mvcc_op 为事务的操作类型,可以是 PUT 或 DELETE 。





未来展望
关于队员
怎么来到 TiDB 的世界的?
不懂 TiDB,怎么快速加入 Hackathon 并且开始工作的?
玩真的:TiDB Hackathon 有什么不同?

文章转载自PingCAP,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




