天天看點

MySQL異構資料同步--tair為例

在實作leveldb挂載成mysql引擎時,發現在實際存儲是key-value格式時候,mysql的異構資料同步,可以更簡單和更通用。

以tair為例,簡要描述一下以mysql為基礎的一種方案。

所謂異構資料同步,是指應用隻更新mysql,而由後端的某些機制将這些更新應用到其他資料存儲服務上。

1、mysql-tair 引擎

a) 使用

MySQL異構資料同步--tair為例

b) 說明

這不是一個“存儲引擎”,實際上資料存儲在tair伺服器上。執行insert/update/delete時,隻是将對應的動作put /remove到tair伺服器。當然這個過程對使用者是透明的。

2、mysql-tair 引擎怎麼用于更新tair資料

首先,資料更新有兩種方式,同步更新和異步更新。

a) 異步更新

先說異步更新。這個類似“讀binlog來更新資料”的方案。如果使用mysql-tair引擎,結構可以如下:

MySQL異構資料同步--tair為例

說明:tair表隻存在slave上,與主庫上要更新的表同名。

完備性:以現在主庫都是row格式的binglog結構為背景,這裡slave上收到的都會是這個更新的完整行資訊,從中取出需要的key和value即可。

b) 同步更新

同步更新的意思,是應用端更新mysql, 在mysql和tair同時更新完成後,mysql才傳回使用者更新成功。

這種模式更像将tair作為mysql的網絡級别緩存服務。當然應用在讀取的時候可以繞過mysql直接通路tair,則隻是作為一種更新方案。

這種模式能夠讓更新後的下一次通路直接命中tair中的緩存資料。異步則無法保證。

結構如下:

MySQL異構資料同步--tair為例

說明:這裡實體資料表與tair表在同一個資料庫,表結構相同,引擎不同。應用還是更新資料表,用觸發器觸發相同的語句更新tair表。

完備性:同樣的,觸發器會得到這個更新的新行全值。

3、mysql同步的優點

這種有以下優勢,即使隻考慮異步更新模式:

a) 不需要自己模拟一個mysql的從庫、不需要維護連接配接(mysql自帶)

b) 不需要解析binlog(什麼時候binlog切換都要關心,要做的事情太多)

c) 更友善的監控。mysql現有的監控接口,直接得到tps、延遲時間,同步點。

d) 更友善的管理。如果主庫挂了,一個change master指令即可;想暫時停更新,stop slave、start slave。

e) 更友善的擴充。 直接利用mysql的級聯主從。

當然還有讀binlog方案無法實作的同步選擇。

4、其他

不限于tair,隻是舉例。

如果後端是一個可靠存儲,如tfs,則可以當作一個存儲表來使用,讀寫都是sql接口。與直接更新tfs有什麼差別?簡單說一個,可以直接跟mysql裡的實體表做join。