日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×

X-Engine 如何實現 Fast DDL

分類:互聯網熱點 編輯:互聯網觀察 瀏覽量:3
2020-07-10 11:21:32

X-Engine是阿里巴巴自研的存儲引擎,作為阿里 RDS MySQL 的一個可選引擎,除了主打高性能和低成本,還增加了不少惠及用戶的新功能。本文將詳細介紹 MySQL(X-Engine) 如何近乎瞬時完成傳統數據庫需要數小時完成的DDL操作。 ##1.數據庫DDL操作面臨的問題 互聯網業務發展迅速,應用模式頻繁更改是常態。相應地,數據庫訪問模式和schema也隨之變化。DDL(Data Definition Language)是SQL的一類,主要作用是創建和更改數據的schema信息,最常見的操作包括:加減列、更改列類型、加減索引等。

熟悉MySQL的同學都知道,在8.0以前,雖然Online DDL不阻塞其它DML(Insert/Update/Delete)操作,但許多重要的DDL操作,如加列、減列等,仍舊需要等待數小時、甚至好幾天時間(依據數據量的大小)才會生效。更改列類型等操作甚至仍需要鎖表執行,阻塞DML操作。 DDL操作運行時間長,占用系統資源,需要額外的磁盤空間(建立臨時表),影響系統吞吐,并且一旦DDL過程中實例crash,恢復時間也會很久。以加列DDL為例,MySQL經歷如下過程: ``` 

1.以新schema建立空表。 

2.拷貝數據到新表,并且將新加列的值賦為默認值,同時更新索引表。數據庫接受到的DML操作被記錄在臨時文件。 

3.加exclusive lock,阻塞寫操作,將臨時文件記錄的DML操作apply到新表。如果DML很多,這一階段將花費較多時間。

4.刪除舊表,將新表命名為舊表的名字。 

``` 顯然,這個過程加鎖時間長,拷貝數據操作會占用系統資源和臨時空間,并需要大量I/O。為了適應變化頻繁的業務,不立即更改存儲層數據、可以快速完成的DDL(我們稱之為Fast DDL)成為了一個必要feature。

MySQL 8.0 增加了instant add column功能,可以在短時間內只修改table元信息,完成加列操作。遺憾的是,它還不支持其它類型的DDL。得益于阿里自研的存儲引擎X-Engine存儲了多版本Table Schema,每一行記錄在引擎層就完成了解析,并且可以依據更新版本的schema實現格式轉換,X-Engine因此可支持多種類型的Fast DDL。 

2.業界Fast ddl實現方案 **MySQL 8.0** record記錄了列個數, instant add column操作只修改系統表。 寫操作:新格式的記錄。 讀操作:根據存儲在系統表中default value補齊新加列。 支持類型: ? Change index optionRename table ? Set/drop default ? Modify column when the table is empty ? Add/drop virtual columnsAdd columns **MariaDB10.3** 整體實現方案與MySQL8.0類似,record記錄了列個數,在leftmost leaf page中記錄所有列的default值. 支持類型: ? Add column ? Drop column ? Extend VARCHAR maximum (Only if the physical format allows; not VARCHAR(255) to VARCHAR(256)) 

Aurora** 發生ddl后,更新系統表,新、舊版本的schema均要記錄下來。然后廣播該修改。之后接受DML請求,首先轉換相關leaf page的所有記錄,然后執行DML。 select請求會將舊版本的記錄拼接成新版本記錄。 支持類型 ? only supports adding nullable columns, without default values ##3.X-Engine多版本schema 顧名思義,Fast DDL指數據庫能夠在極短的時間內完成用戶發出的DDL指令并返回。之所以這么快,是因為只修系統表里的元數據,不變更引擎層存儲的數據。其實現的關鍵在于:元信息變更之后,內存、磁盤中的物理記錄該如何解析。 Engine的架構采用了LSM-Tree的思想,將新寫入的數據以追加方式寫入內存memtable,memtable到一定大小后switch為immutable memtable,不再修改。然后逐漸以固定大小extent的形式,flush到持久化存儲中。

當extent到一定數量后,通過合并(Compaction)操作,將相同Key的多個版本合并。為了讓每行記錄可解析,最直觀簡單的方案便是將元信息附著在記錄上面。為了能夠不依賴系統表解析記錄,X-Engine存儲了較為詳細的元數據,如果為每一行都附著一份,會占用大量的空間。為了大大減少存儲成本,我們保證每個memtable和extent內部的數據schema一致,并將schema信息存儲在memtable和extent之上。 schema信息包含了諸如列個數、列類型、列長度、默認值等關鍵信息。利用這些信息,X-Engine可以在返回結果之前,完成列解析,并只需返回查詢目標列的對應結果。下面給出了一個具體的例子,同一張表存在不同schema版本的extent時,如何返回結果。 

4.X-Engine fast ddl實現 當 MySQL 接收到一條fast ddl語句時,更新相關系統表及元數據,新版本的表結構隨之生效,這時這條DDL語句就執行成功啦!到現在為止X-Engine存儲的信息沒有發生任何變化。 **讀請求** 當系統接收到Select請求時,MySQL 會將請求本身,連同當前最新版本schema信息(稱之為target schema)傳遞到X-Engine。X-Engine首先定位到記錄的位置(某個memtable或extent),并取相應數據schema解析記錄得到初步結果。接著,對比數據schema和target schema,對初步結果做適當填充、刪減或修改得到最終結果返回。 **X-Engine schema更新** Fast DDL命令執行成功,新版本的schema生效,X-Engine還對此無感知。當接收到第一條針對該表的DML(Insert/Update/ Delete)請后,如果發現X-Engine的活躍memtable的schema版本落后于最新版本,會觸發switch memtable行為:凍結當前活躍memtable,產生新活躍memtable,將新schema賦予新活躍memtable。為了保證數據的正確性,該操作會等待所有正在進行的寫事務完成后再執行。 

寫請求

 每個寫事務可能涉及到n(n>=1)個表。事務在提交時,需要在寫入活躍memtable之前判斷:事務寫入數據的schema版本是否與活躍memtable的schema版本一致,如果不一致則應該報錯退出,提醒用戶重試。 **Flush/Compaction** 內存中memtable數量到一定個數時會觸發Flush操作,被選中memtable的數據以extent的形式寫入磁盤,schema也隨之由memtable傳遞到extent。Compaction操作會合并多個extent,如果參與同一任務的extent schema版本不一致,X-Engine會以其中最新版本為準,生成新extent。

總結 Fast DDL可以解決很多應用的痛點,加列、擴展列的常用的操作不用再需要漫長的等待。技術上,X-Engine通過存儲詳細的多版本schema信息,不僅無需借助系統表解析記錄,而且可以輕易地實現不同版本schema之間的數據轉換,進而可以支持豐富的Fast DDL類型。


聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 毛片网站在线观看视频 | 乱人伦精品视频在线观看 | 久久久精品国产免大香伊 | 白丝美女喷水 | 亚洲成 人 综合 亚洲欧洲 | 欧美专区综合 | 正在播放熟妇群老熟妇456 | 亚洲区欧美区综合区自拍区 | 午夜爱| 无码一区二区三区久久精品 | 国内精品久久久久影院老司机 | 欧美视频日韩视频 | 国产欧美精品一区 | wwwxx在线观看| 一久久久久 | 亚洲不卡高清视频 | 中文版在线乱码在线看 | 国产白丝精品爽爽久久蜜臀 | 一本一道久久久a久久久精品91 | 揉着我的奶从后面进去视频 | 午夜激情视频免费观看 | 成人免费777777被爆出 | 日一区二区 | 日韩不卡1卡2卡三卡2021免费 | 精品国产在天天在线观看 | 狂野欧美性猛交xxⅹ李丽珍 | 亚洲天堂一级片 | 国产精品污www在线观看 | 日韩视频免费观看 | 96国产xxxx免费视频 | 免费h动漫无码网站 | 亚洲 欧美 视频 | 免费国产黄网站在线看 | 精品伊人久久大线蕉色首页 | 六个黑人玩一个中国少妇视频 | 女人被狂c躁到高潮视频 | 久久人人爽人人爽人人片av | 欧美久久久久久久久久久久 | 高清黄色一级片 | 国产精品成人免费一区久久羞羞 | 99热99re6国产在线播放 | 果冻传媒色av国产在线播放 | 婷婷丁香六月激情综合啪 | 亚洲乱码中文论理电影 | 成人午夜无码精品免费看 | 99精品久久精品一区二区 | 天天色综合色 | 成人av高清在线观看 | 国产日韩欧美一区二区久久精品 | 西西人体大胆啪啪实拍 | 久久国产精品99精品国产987 | 农村老妇性真猛 | 亚洲成av人片一区二区蜜柚 | 日本熟妇色xxxxx欧美老妇 | 波多野结衣欧美 | 强插女教师av在线 | 人妻系列无码专区2020 | 乱女午夜精品一区二区三区 | 91夜色视频| 日韩色道 | 精品无码成人久久久久久 | 2021国产自在自线免 | 国产在线看片免费视频 | 国产精品久人妻精品老妇 | 人妻无码αv中文字幕久久琪琪布 | 亚洲人成网站在小说 | 国产一区99 | 亚洲精品久久酒店 | 亚洲成人网在线播放 | 波多野结衣一区二区三区在线观看 | 麻豆一区二区三区蜜桃免费 | 99产精品成人啪免费网站 | 亚洲va综合va国产产va中文 | 男人的天堂免费视频 | 中文有码无码人妻在线 | 亚洲中文字幕乱码熟女在线 | 欧美韩国日本 | 天堂av免费在线观看 | 奇米7777狠狠狠琪琪视频 | 日本大乳奶做爰洗澡三级 | 色视频无码专区在线观看 | 欧美又粗又大又硬又长又爽视频 | 7777精品久久久大香线蕉小说 | 野花香社区在线视频观看播放 | 性欧美乱妇高清come | 综合久久给合久久狠狠狠97色 | 伊在人亚洲香蕉精品区 | 黄色一级网 | 午夜视频h| 97香蕉久久国产在线观看 | 久久精品国产只有精品96 | 精品黄色av | 久久www成人_看片免费不卡 | 精品国产天堂综合一区在线 | 午夜免费无码福利视频麻豆 | 亚洲图欧洲图自拍另类高清 | 免费的美女色视频网站 | 久拍国产在线观看 | 日本熟日本熟妇中文在线观看 |