您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了 online DDL的原理以及Vitess如何幫助處理模式遷移的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價(jià)值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學(xué)習(xí)“ online DDL的原理以及Vitess如何幫助處理模式遷移”的知識(shí)吧。
Vitess 引入了一種運(yùn)行模式遷移的新方法:非阻塞的、異步的、預(yù)定的online DDL。通過 online DDL,Vitess 簡(jiǎn)化了模式遷移過程,它獲得了操作開銷的所有權(quán),并為用戶提供了一個(gè)簡(jiǎn)單、熟悉的界面:標(biāo)準(zhǔn)的 ALTER TABLE 語句。
讓我們首先介紹一些背景知識(shí)并解釋為什么模式遷移在數(shù)據(jù)庫世界中是一個(gè)如此重要的問題,然后深入研究實(shí)現(xiàn)細(xì)節(jié)。
關(guān)系模型是軟件世界中存在時(shí)間最長(zhǎng)的模型之一,它是幾十年前引入的,直到今天仍被廣泛使用。SQL 同樣古老而可靠,甚至在非關(guān)系數(shù)據(jù)庫中也可以找到 SQL 或類似 SQL 的語言。
關(guān)系模型對(duì)許多常見的用例都有意義,具有屬性的實(shí)體(分別為表和列)可以很好地映射到流行的結(jié)構(gòu),如用戶、產(chǎn)品、成員關(guān)系、消息等,而且 SQL 的表達(dá)能力足夠強(qiáng),能夠構(gòu)造簡(jiǎn)單和復(fù)雜的問題。
但從歷史上看,關(guān)系模型是有代價(jià)的。雖然許多數(shù)據(jù)庫系統(tǒng)對(duì)讀和寫進(jìn)行了優(yōu)化,但它們對(duì)元數(shù)據(jù)更改(特別是模式更改)的優(yōu)化程度并不高。此類更改的最大挑戰(zhàn)之一是,它們需要一個(gè)操作程序,而且大多不在開發(fā)人員的領(lǐng)域之內(nèi)。
在早期,數(shù)據(jù)庫管理員(DBA)充當(dāng)數(shù)據(jù)庫的保鏢是很常見的。他們會(huì)拖延來自開發(fā)者的“瘋狂請(qǐng)求”。變更的要求需要經(jīng)過漫長(zhǎng)的程序和文書工作。
幸運(yùn)的是,這些日子已經(jīng)過去了,我們?cè)诔掷m(xù)部署和快速開發(fā)方面更加協(xié)作。然而,新的變化加劇了這個(gè)問題。在過去,你需要每月更改一次模式;也許幾個(gè)月就有一次。你應(yīng)該為此做好準(zhǔn)備,推出一個(gè)新的版本。如今,世界上最繁忙的數(shù)據(jù)庫部署每天都要運(yùn)行多個(gè)模式遷移,這并不少見。
這重新引入并強(qiáng)化了模式遷移問題:該過程大部分不在開發(fā)人員的領(lǐng)域之內(nèi)。它要求他們是數(shù)據(jù)庫專家。在每天進(jìn)行多次遷移的情況下,他們需要以與自己的開發(fā)流程不兼容的方式與其他開發(fā)人員協(xié)作和同步(例如,這與比較和合并 git 分支完全不同)。在小公司中,你會(huì)看到開發(fā)人員只是在他們認(rèn)為合適的時(shí)候擁有和運(yùn)行他們的遷移,但這并不能擴(kuò)展,而且產(chǎn)品和組織越大,就越需要一個(gè)更正式的流程。
在 MySQL 世界中,直接的模式遷移是阻塞的,如果不是在主服務(wù)器上,那就是在副本上。他們對(duì)資源咄咄逼人,無法被打斷或壓制。在線模式更改工具已經(jīng)存在了十多年,但是它們引入了自己的復(fù)雜性:你需要將它們與數(shù)據(jù)庫一起安裝、允許訪問、安排執(zhí)行、登錄、執(zhí)行、通知這些工具如何進(jìn)行限制、處理錯(cuò)誤、為它們的操作提供可見性等等。在規(guī)模較大的公司中,有專門的 DBA 或 Ops 團(tuán)隊(duì)手動(dòng)執(zhí)行模式更改是很常見的。這些團(tuán)隊(duì)可以每周甚至每天花費(fèi)數(shù)小時(shí)來處理模式遷移的操作開銷。
對(duì)于開發(fā)人員來說,這是一種所有權(quán)的喪失。雖然他們有向某個(gè)表添加列的想法,但他們需要從外部團(tuán)隊(duì)請(qǐng)求幫助,并且常常等待,而對(duì)進(jìn)展?fàn)顟B(tài)沒有太多的可見性。這就打破了他們的流程。也許 NoSQL 數(shù)據(jù)庫最大的吸引力之一是它們不會(huì)對(duì)開發(fā)人員的流程施加這種級(jí)別的約束。
對(duì)于 DBA 來說,模式遷移是一種負(fù)擔(dān)。一些開發(fā)人員對(duì)他們自己的工作流程的意外中斷。
操作開銷始于模式遷移跨越多個(gè)域這一事實(shí)。讓我們來看看模式遷移流的不完整分解:
對(duì)于生產(chǎn)環(huán)境中的多個(gè)集群(其中一些是分片的),用于識(shí)別正確的集群的發(fā)現(xiàn)機(jī)制是什么?用于應(yīng)用模式更改的集群的主機(jī)是?
Vitess 的架構(gòu)使其處于一個(gè)獨(dú)特的位置,可以處理大多數(shù)模式遷移流程。例如:
Vitess 知道模式部署在何處、存在哪些碎片、在任何給定時(shí)間誰是主節(jié)點(diǎn),并且可以在正確的數(shù)據(jù)庫服務(wù)器上應(yīng)用 DDL,而無需用戶干預(yù)。
開發(fā) Vitess online DDL 的目標(biāo)是盡可能地向用戶隱藏所有的復(fù)雜性。因此,所有用戶需要運(yùn)行的是:
SET @@ddl_strategy=’gh-ost’;
ALTER TABLE my_table ADD COLUMN some_column INT NOT NULL;
ALTER TABLE 語句本身是完全正常的,但是響應(yīng)不同。它立即返回,并帶有一個(gè)作業(yè) ID,用戶可以使用該 ID 跟蹤遷移的進(jìn)度。用戶可以選擇 gh-ost 策略、pt-osc 策略或普通 direct 策略(不是 online DDL)。
關(guān)于“ online DDL的原理以及Vitess如何幫助處理模式遷移”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請(qǐng)多多支持億速云網(wǎng)站!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。