這是Canal在新版本引入的一個(gè)內(nèi)容,主要是為了解決由于歷史的DDL導(dǎo)致表結(jié)構(gòu)與現(xiàn)有表結(jié)構(gòu)不一致,導(dǎo)致的同步失敗的問題。采用的是Druid和Fastsql,來記錄表結(jié)構(gòu)到DB中,如果需要進(jìn)行回滾時(shí),得從DB中根據(jù)時(shí)間點(diǎn)去查到對(duì)應(yīng)的庫(kù)表結(jié)構(gòu),然后進(jìn)行業(yè)務(wù)的處理。也就是,如果我們想要這樣的效果,需要開啟TSDB的功能,同時(shí)要新增庫(kù)表來記錄表結(jié)構(gòu)的變更。
這個(gè)基本上是在parser啟動(dòng)時(shí),尋找位點(diǎn)時(shí)需要的。當(dāng)然在系統(tǒng)啟動(dòng)的時(shí)候,會(huì)將庫(kù)表的信息寫入到DB中,然后定時(shí)24小時(shí)寫入一次。另外就是在發(fā)生了DDL時(shí),會(huì)更新表結(jié)構(gòu)。
我們來看下他的類圖。

TSDB.png
一張表記錄的是表結(jié)構(gòu),加上了時(shí)間,另一張記錄的是當(dāng)時(shí)的DDL語(yǔ)句。在進(jìn)行回溯的時(shí)候,直接根據(jù)時(shí)間戳和binlog文件名來進(jìn)行尋找即可找到。當(dāng)然這些數(shù)據(jù)也會(huì)在內(nèi)存中保存一份,加快速度。
具體的介紹可以見這個(gè)鏈接https://github.com/alibaba/canal/wiki/TableMetaTSDB。