繼續回答知識星球水友提問。
問題域:資料量大、併發量高場景,如何在流量低峰期,平滑實施表結構變更?
畫外音,一般來說,是指增加表的屬性,因為:
如果是減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...