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

2021-10-10 10:43:10 字數 1019 閱讀 1363

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

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

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

如果是減column,公升級程式不使用即可;

如果是修改column,程式相容性容易出問題;

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

畫外音:alter table add column

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

舉個例子,對:

t_user(uid, c1, c2, c3)

想要擴充套件屬性,可以通過增加乙個表實現:

t_user_ex(uid, c4, c5, c6)

資料量大的情況下,join效能較差,一般不可行。

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

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

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

參考文章:pt-online-schema-change使用詳解

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

畫外音:我呆過的網際網路公司,資料庫均使用mysql。

下面仍以使用者表擴充套件為例,說下這個工具內部的原理與步驟。

假設:

user

(uid, name, passwd)

要擴充套件到:

user

(uid, name, passwd, age, ***)

user_new(uid, name, passwd, age, ***)

畫外音:就是被擴充套件後的表。

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

操作過程中需要注意:

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

QC資料庫表結構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!有時候qc的報表不能滿足我們的要求,需要自己從qc的資料庫中查詢資料,放到excel中進行統計並生成圖表,因此有必要熟悉一下qc的表結構 requirement req requirement types req type requirement ...

資料庫修改表結構

修改資料表 alter table 表名sql 的書寫不考慮順序,但是批量執行 需要要考慮好先執行哪些,後執行哪些 在修改資料表結構時,必須要明確 修改的字段中是否存在資料,例如 如果需要更改乙個欄位的約束為非空約束,那麼首先要保證該字段中已有的資料沒有null值。因此在做程式之前資料庫分析,設計是...

Zabbix資料庫表結構

acknowledges 當出現報錯的時候記錄 檢視著張表記錄了乙個事件 動作自動發現 問題告警 恢復告警 自動註冊 報警資訊 同web頁面的 操作日誌 在頁面上面檢視 autoreg host 自動註冊的主機 config 配置 dbversion 資料庫版本需要一致 重啟zabbix serve...