成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幾千萬記錄,數據庫表結構如何平滑變更?

開發 開發工具 其他數據庫
數據量大、并發量高場景,如何在流量低峰期,平滑實施表結構變更?任何脫離業務的架構設計都是耍流氓。

 


繼續回答知識星球水友提問。

 

問題域:數據量大、并發量高場景,如何在流量低峰期,平滑實施表結構變更?

畫外音,一般來說,是指增加表的屬性,因為:

  • 如果是減column,升級程序不使用即可;
  • 如果是修改column,程序兼容性容易出問題;

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

(1) 方案一:在線修改表結構。

畫外音:alter table add column

數據量大的情況下,鎖表時間會較長,造成拒絕服務,一般不可行。

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

舉個例子,對:

  1. t_user(uid, c1, c2, c3) 

想要擴展屬性,可以通過增加一個表實現:

  1. t_user_ex(uid, c4, c5, c6) 

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

(3) 方案三,通過增加表的方式擴展,通過視圖來屏蔽底層復雜性。

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

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

(4) 方案四,揍產品經理,阻止她修改需求。...

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

這個方案可行,但如果預留過多,會造成空間浪費。

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

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

畫外音:我呆過的互聯網公司,數據庫均使用MySQL。

下面仍以用戶表擴展為例,說下這個工具內部的原理與步驟。

假設:

  1. user(uid, name, passwd) 

要擴展到:

  1. user(uid, name, passwd, age, sex) 

第一步,先創建一個擴充字段后的新表:

  1. user_new(uid, name, passwd, age, sex) 

畫外音:就是被擴展后的表。

第二步,在原表user上創建三個觸發器,對原表user進行的所有insert/delete/update操作,都會對新表user_new進行相同的操作;

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

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

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

擴充字段完成,整個過程不需要鎖表,可以持續對外提供服務。

操作過程中需要注意:

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

pt-online-schema-change是DBA必備的利器,比較成熟,在互聯網公司使用廣泛,要了解更詳細的細節,亦可以Google一下。

任何脫離業務的架構設計都是耍流氓。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

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

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2010-08-06 14:29:14

DB2數據庫并置

2010-09-10 13:37:30

表分區SQL Server

2018-09-11 17:13:23

MySQ數據庫重復記錄

2009-02-02 13:16:23

修復數據表MySQL

2011-05-18 13:16:21

MySQL數據庫鎖定

2011-08-04 15:55:25

SQL Server數

2023-09-14 23:05:57

? ?MySQL數據庫

2011-08-04 13:31:50

數據庫記錄更改日志觸發器

2011-07-29 11:20:51

MySQL數據庫字段重復

2011-08-25 13:41:50

SQL Server 變更跟蹤

2010-05-24 13:14:19

創建MySQL

2023-03-29 07:02:46

開源項目工具

2011-05-17 11:23:02

Oracle數據庫

2009-02-02 16:50:34

數據庫表的鎖定MySQL

2014-07-09 14:23:20

WordPress數據庫表

2011-03-07 13:30:53

Oracle數據庫

2020-12-09 11:38:16

數據庫測試環境

2010-04-28 18:25:51

Oracle數據庫

2010-07-12 15:49:53

MS SQL Serv

2011-09-01 14:00:11

SQL Server 存儲過程顯示表結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品小视频 | 91精品国产自产精品男人的天堂 | 国产欧美视频一区二区 | 国产高清精品一区二区三区 | 亚洲视频在线观看 | 日日天天 | 国产在线精品一区二区三区 | 成人影院一区二区三区 | 蜜桃臀av一区二区三区 | 一级a性色生活片久久毛片波多野 | 一区二区三区国产精品 | 久久激情网| 日韩在线视频一区二区三区 | 综合精品在线 | 秋霞在线一区二区 | 亚洲精品一二三区 | 欧美1区2区 | 色99视频 | 日本黄色免费大片 | 欧美日韩在线一区二区 | 91婷婷韩国欧美一区二区 | 日韩高清国产一区在线 | 在线观看特色大片免费网站 | 日韩一区二区在线视频 | 精品一区二区三区91 | 久久久久久久电影 | 日韩精品一区二区三区中文在线 | 国产美女在线免费观看 | 国产精品免费在线 | 亚洲美乳中文字幕 | 免费观看a级毛片在线播放 黄网站免费入口 | 午夜av成人 | 成人av一区二区三区 | 国产a区 | 99伊人| 国产色婷婷精品综合在线播放 | 日韩国产中文字幕 | 一区二区视频在线 | 国产一级视屏 | 国产欧美日韩一区 | 成人a在线|