亚洲全黄无码一级在线看_国产剧情久久久性色_无码av一区二区三区无码_亚洲成a×人片在线观看

當(dāng)前位置: 首頁(yè) > 科技新聞 >

專欄

時(shí)間:2019-11-12 21:07來(lái)源:網(wǎng)絡(luò)整理 瀏覽:
繼續(xù)回答知識(shí)星球水友提問(wèn)。 問(wèn)題域:數(shù)據(jù)量大、并發(fā)量高場(chǎng)景,如何在流量低峰期,平滑實(shí)施表結(jié)構(gòu)變更? 畫外音,一般來(lái)說(shuō),是指增加表的

專欄


繼續(xù)回答知識(shí)星球水友提問(wèn)。

問(wèn)題域:數(shù)據(jù)量大、并發(fā)量高場(chǎng)景,如何在流量低峰期,平滑實(shí)施表結(jié)構(gòu)變更?

畫外音,一般來(lái)說(shuō),是指增加表的屬性,因?yàn)椋?/p>

  • 如果是減column,升級(jí)程序不使用即可;
  • 如果是修改column,程序兼容性容易出問(wèn)題;

首先,一起看下有哪些常見方案。

(1) 方案一:在線修改表結(jié)構(gòu)。

畫外音:alter table add column

數(shù)據(jù)量大的情況下,鎖表時(shí)間會(huì)較長(zhǎng),造成拒絕服務(wù),一般不可行。

(2) 方案二:通過(guò)增加表的方式擴(kuò)展屬性,通過(guò)外鍵join來(lái)查詢。

舉個(gè)例子,對(duì):

 

想要擴(kuò)展屬性,可以通過(guò)增加一個(gè)表實(shí)現(xiàn):

 

數(shù)據(jù)量大的情況下,join性能較差,一般不可行。

(3)方案三,通過(guò)增加表的方式擴(kuò)展,通過(guò)視圖來(lái)屏蔽底層復(fù)雜性。

同上,視圖效率較低,一般不使用視圖。

畫外音:至少58到家禁止使用視圖。

(4) 方案四,揍產(chǎn)品經(jīng)理,阻止她修改需求。...

(5) 方案五,提前預(yù)留一些reserved字段,加列可復(fù)用這些字段。

這個(gè)方案可行,但如果預(yù)留過(guò)多,會(huì)造成空間浪費(fèi)。

(6) 方案六,pt-online-schema-change

對(duì)于MySQL而言,這是目前比較成熟的方案,被廣大公司所使用。

畫外音:我呆過(guò)的互聯(lián)網(wǎng)公司,數(shù)據(jù)庫(kù)均使用MySQL。

下面仍以用戶表擴(kuò)展為例,說(shuō)下這個(gè)工具內(nèi)部的原理與步驟。

假設(shè):

 

要擴(kuò)展到:

 

第一步,先創(chuàng)建一個(gè)擴(kuò)充字段后的新表:

 

畫外音:就是被擴(kuò)展后的表。

第二步,在原表user上創(chuàng)建三個(gè)觸發(fā)器,對(duì)原表user進(jìn)行的所有insert/delete/update操作,都會(huì)對(duì)新表user_new進(jìn)行相同的操作;

第三步,分批將原表user中的數(shù)據(jù)insert到新表user_new,直至數(shù)據(jù)遷移完成;

第四步,刪掉觸發(fā)器,把原表移走(默認(rèn)是drop掉);

第五步,把新表user_new重命名(rename)成原表user;

擴(kuò)充字段完成,整個(gè)過(guò)程不需要鎖表,可以持續(xù)對(duì)外提供服務(wù)。

操作過(guò)程中需要注意:

  • 變更過(guò)程中,最重要的是沖突的處理,一條原則,以觸發(fā)器的新數(shù)據(jù)為準(zhǔn),這就要求被遷移的表必須有主鍵(這個(gè)要求基本都滿足);
  • 變更過(guò)程中,寫操作需要建立觸發(fā)器,所以如果原表已經(jīng)有很多觸發(fā)器,方案就不行(互聯(lián)網(wǎng)大數(shù)據(jù)高并發(fā)的在線業(yè)務(wù),一般都禁止使用觸發(fā)器);
  • 觸發(fā)器的建立,會(huì)影響原表的性能,所以這個(gè)操作必須在流量低峰期進(jìn)行;

pt-online-schema-change是DBA必備的利器,比較成熟,在互聯(lián)網(wǎng)公司使用廣泛,要了解更詳細(xì)的細(xì)節(jié),亦可以Google一下。

任何脫離業(yè)務(wù)的架構(gòu)設(shè)計(jì)都是耍流氓。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

專欄

戳這里,看該作者更多好文

【責(zé)任編輯:趙寧寧 TEL:(010)68476606】
推薦內(nèi)容