W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
產品第一版:用戶有用戶名、密碼、昵稱等三個屬性,對應表設計:
user(uid, name, passwd, nick)
第二版,產品經理增加了年齡,性別兩個屬性,表結構可能要變成:
user(uid, name, passwd, nick, age, sex)
假設數據量和并發(fā)量比較大,怎么變?
(1)alter table add column?不太可行,鎖表時間長
(2)新表+觸發(fā)器?如果數據量太大,新表不一定裝得下,何況觸發(fā)器對數據庫性能的影響比較高
(3)讓dba來搞?新表,遷移數據,一致性校驗,rename?dba真苦逼
以上面的用戶表為例,假設只有uid和name上有查詢需求,表可以設計為
user(uid, name, version, ext)
(1)uid和name有查詢需求,必須設計為單獨的列并建立索引
(2)version是版本號字段,它對ext進行了版本解釋
(3)ext采用可擴展的字符串協議載體,承載被查詢的屬性
優(yōu)點:
(1)可以隨時動態(tài)擴展屬性
(2)新舊兩種數據可以同時存在
(3)遷移數據方便,寫個小程序將舊版本ext的改為新版本的ext,并修改version
不足:
(1)ext里的字段無法建立索引
(2)ext里的key值有大量冗余,建議key短一些
改進:
(1)如果ext里的屬性有索引需求,可能Nosql的如MongoDB會更適合
以上面的用戶表為例,可以設計為
user(uid, key, value)
初期有name, passwd, nick三個屬性,那么數據為:
優(yōu)點:
(1)可以隨時動態(tài)擴展屬性
(2)新舊兩種數據可以同時存在
(3)遷移數據方便,寫個小程序可以將新增的屬性加上
(4)各個屬性上都可以查詢
不足:
(1)key值有大量冗余,建議key短一些
(2)本來一條記錄很多屬性,會變成多條記錄,行數會增加很多
可以通過“version+ext”或者“key+value”的方式來滿足產品新增列的需求,希望沒有浪費你這一分鐘,有收獲就好。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: