MySQL異構資料同步–tair為例

丁奇發表於2016-03-24

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

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

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

1、MySQL-Tair 引擎

a) 使用

b) 說明

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

2、MySQL-Tair 引擎怎麼用於更新tair資料

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

a) 非同步更新

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

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

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

b) 同步更新

同步更新的意思,是應用端更新MySQL MySQLtair同時更新完成後,MySQL才返回使用者更新成功。

這種模式更像將tair作為MySQL的網路級別快取服務。當然應用在讀取的時候可以繞過MySQL直接訪問tair,則只是作為一種更新方案。

這種模式能夠讓更新後的下一次訪問直接命中tair中的快取資料。非同步則無法保證。

結構如下:

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

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

3、MySQL同步的優點

這種有以下優勢,即使只考慮非同步更新模式:

a) 不需要自己模擬一個MySQL的從庫、不需要維護連線(MySQL自帶)

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

c) 更方便的監控。MySQL現有的監控介面,直接得到tps、延遲時間,同步點。

d) 更方便的管理。如果主庫掛了,一個Change master命令即可;想暫時停更新,stop slavestart slave

e) 更方便的擴充套件。 直接利用MySQL的級聯主從。

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

4、其他

不限於tair,只是舉例。

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


相關文章