国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

DM 源碼閱讀系列文章(八)Online Schema Change 同步支持

stackvoid / 1819人閱讀

摘要:作者本文為源碼閱讀系列文章的第八篇,上篇文章對(duì)中的定制化數(shù)據(jù)同步功能進(jìn)行詳細(xì)的講解,包括庫(kù)表路由黑白名單列值轉(zhuǎn)化過(guò)濾四個(gè)主要功能的實(shí)現(xiàn)。小結(jié)本篇文章詳細(xì)地介紹對(duì)方案的同步支持,內(nèi)容包含方案的簡(jiǎn)單介紹,同步方案,以及同步實(shí)現(xiàn)細(xì)節(jié)。

作者:lan

本文為 DM 源碼閱讀系列文章的第八篇,上篇文章 對(duì) DM 中的定制化數(shù)據(jù)同步功能進(jìn)行詳細(xì)的講解,包括庫(kù)表路由(Table routing)、黑白名單(Black & white table lists)、列值轉(zhuǎn)化(Column mapping)、binlog 過(guò)濾(Binlog event filter)四個(gè)主要功能的實(shí)現(xiàn)。

本篇文章將會(huì)以 gh-ost 為例,詳細(xì)地介紹 DM 是如何支持一些 MySQL 上的第三方 online schema change 方案同步,內(nèi)容包括 online schema change 方案的簡(jiǎn)單介紹,online schema change 同步方案,以及同步實(shí)現(xiàn)細(xì)節(jié)。

MySQL 的 Online Schema Change 方案

目前有一些第三方工具支持在 MySQL 上面進(jìn)行 Online Schema Change,比較主流的包括 pt-online-schema-change 和 gh-ost。

這些工具的實(shí)現(xiàn)原理比較類似,本文會(huì)以 gh-ost 為例來(lái)進(jìn)行分析講解。

從上圖可以大致了解到 gh-ost 的邏輯處理流程:

在操作目標(biāo)數(shù)據(jù)庫(kù)上使用 create table ghost table like origin table 來(lái)創(chuàng)建 ghost 表;

按照需求變更表結(jié)構(gòu),比如 add column/index

gh-ost 自身變?yōu)?MySQL replica slave,將原表的全量數(shù)據(jù)和 binlog 增量變更數(shù)據(jù)同步到 ghost 表;

數(shù)據(jù)同步完成之后執(zhí)行 rename origin table to table_del, table_gho to origin table 完成 ghost 表和原始表的切換

pt-online-schema-change 通過(guò) trigger 的方式來(lái)實(shí)現(xiàn)數(shù)據(jù)同步,剩余流程類似。

在 DM 的 task 配置中可以通過(guò)設(shè)置 online-ddl-scheme 來(lái)配置的 online schema change 方案,目前僅支持 gh-ost/pt 兩個(gè)配置選項(xiàng)。

DM Online Schema Change 同步方案

根據(jù)上個(gè)章節(jié)介紹的流程,pt 和 gh-ost 除了 replicate 數(shù)據(jù)的方式不一樣之外,其他流程都類似,并且這種 native 的模式可以使得 binlog replication 幾乎不需要修改就可以同步數(shù)據(jù)。但是 DM 為了減少同步的數(shù)據(jù)量,簡(jiǎn)化一些場(chǎng)景(如 shard tables merge)下的處理流程,并做了額外的優(yōu)化,即,不同步 ghost 表的數(shù)據(jù)。

繼續(xù)分析 online schema change 的流程,從數(shù)據(jù)同步的角度看有下面這些需要關(guān)注的點(diǎn):

原始表的增量數(shù)據(jù)同步模式有沒(méi)有變化

ghost 表會(huì)產(chǎn)生跟原始表幾乎一樣的冗余 binlog events

通過(guò) rename origin table to table_del, table_gho to origin table 完成 ghost 表和原始表的切換

如果使用 ghost 表的 alter DDL 替換掉 rename origin table to table_del, table_gho to origin table ,那么就可以實(shí)現(xiàn)我們的不同步 ghost 表數(shù)據(jù)的目的。

DM Online Schema Change 同步實(shí)現(xiàn)細(xì)節(jié)

Online schema change 模塊代碼實(shí)現(xiàn)如下:

gh-ost 同步代碼實(shí)現(xiàn)

pt-online-schema-change 同步代碼實(shí)現(xiàn)

DM 將 同步的表分為三類:

real table - 原始表

trash table - online schema change 過(guò)程中產(chǎn)生的非關(guān)鍵數(shù)據(jù)表,比如以 _ghc, _del 為后綴的表

ghost table - 與原始表對(duì)應(yīng)的經(jīng)過(guò) DDL 變更的數(shù)據(jù)表,比如以 _gho 為后綴的表

當(dāng) DM 遇到 DDL 的時(shí)候,都會(huì) 調(diào)用 online schema change 模塊的代碼進(jìn)行處理,首先判斷表的類型,接著針對(duì)不同類型作出不同的處理:

real table - 對(duì) rename table statement 進(jìn)行模式檢查,直接返回執(zhí)行

trash table - 對(duì) rename table statement 做一些模式檢查,直接忽略同步

ghost table

如果 DDL 是 create/drop table statement ,則 清空內(nèi)存中的殘余信息后忽略這個(gè) DDL 繼續(xù)同步

如果 DDL 是 rename table statement ,則 返回內(nèi)存中保存的 ghost table 的 DDLs

如果是其他類型 DDL,則把這些 DDL 保存在內(nèi)存中

下面是一個(gè)執(zhí)行示例,方便大家對(duì)照著來(lái)理解上面的代碼邏輯:

Section 1: 使用 create table like statement 創(chuàng)建 ghost table,DM 會(huì)清空內(nèi)存中 online_ddl._t2_gho 對(duì)應(yīng)的 DDL 信息

Section 2: 執(zhí)行 alter table statement,DM 會(huì)保存 DDL 到內(nèi)存中

Section 3:trash table 的 DDLs 會(huì)被忽略

Section 4:遇到 ghost table 的 rename table statement 會(huì)替換成 Section 2 的 DDL, 并且將該 DDL 的 table name 更換成對(duì)應(yīng) real table name 去執(zhí)行

注意: rename table statement 模式檢查主要是為了確保在 online schema change 變更過(guò)程中除了 rename origin table to table_del, table_gho to origin table 之外沒(méi)有其他 rename table statement,避免同步狀態(tài)的復(fù)雜化。

小結(jié)

本篇文章詳細(xì)地介紹 DM 對(duì) online schema change 方案的同步支持,內(nèi)容包含 online schema change 方案的簡(jiǎn)單介紹, online schema change 同步方案,以及同步實(shí)現(xiàn)細(xì)節(jié)。下一章會(huì)對(duì) DM 的 shard DDL merge 方案進(jìn)行詳細(xì)的講解,敬請(qǐng)期待。

原文閱讀
https://www.pingcap.com/blog-cn/dm-source-code-reading-8/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/18054.html

相關(guān)文章

  • DM 源碼閱讀系列文章(七)定制化數(shù)據(jù)同步功能的實(shí)現(xiàn)

    摘要:作者王相本文為源碼閱讀系列文章的第七篇,在上篇文章中我們介紹了的實(shí)現(xiàn),主要包括目錄結(jié)構(gòu)定義數(shù)據(jù)的處理流程主從切換支持的讀取等邏輯。本篇文章我們將會(huì)對(duì)的定制化數(shù)據(jù)同步功能進(jìn)行詳細(xì)的講解。 作者:王相 本文為 DM 源碼閱讀系列文章的第七篇,在 上篇文章 中我們介紹了 relay log 的實(shí)現(xiàn),主要包括 relay log 目錄結(jié)構(gòu)定義、relay log 數(shù)據(jù)的處理流程、主從切換支持、...

    leo108 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<