自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

啥,又要為表增加一列屬性?

開發(fā) 開發(fā)工具
今天分享2個(gè)列擴(kuò)展性設(shè)計(jì)上幾個(gè)小技巧,只占大伙1分鐘。

需求緣起

產(chǎn)品***版:用戶有用戶名、密碼、昵稱等三個(gè)屬性,對(duì)應(yīng)表設(shè)計(jì):

user(uid, name, passwd, nick)

第二版,產(chǎn)品經(jīng)理增加了年齡,性別兩個(gè)屬性,表結(jié)構(gòu)可能要變成:

user(uid, name, passwd, nick, age, sex)

假設(shè)數(shù)據(jù)量和并發(fā)量比較大,怎么變?

(1)alter table add column?不太可行,鎖表時(shí)間長

(2)新表+觸發(fā)器?如果數(shù)據(jù)量太大,新表不一定裝得下,何況觸發(fā)器對(duì)數(shù)據(jù)庫性能的影響比較高

(3)讓dba來搞?新表,遷移數(shù)據(jù),一致性校驗(yàn),rename?dba真苦逼

今天分享2個(gè)列擴(kuò)展性設(shè)計(jì)上幾個(gè)小技巧,只占大伙1分鐘(下班太晚的話,只能寫一分鐘系列=_=)

[[179110]]

方案一:版本號(hào)+通用列

以上面的用戶表為例,假設(shè)只有uid和name上有查詢需求,表可以設(shè)計(jì)為

user(uid, name, version, ext)

(1)uid和name有查詢需求,必須設(shè)計(jì)為單獨(dú)的列并建立索引

(2)version是版本號(hào)字段,它對(duì)ext進(jìn)行了版本解釋

(3)ext采用可擴(kuò)展的字符串協(xié)議載體,承載被查詢的屬性

例如,最開始上線的時(shí)候,版本為0,此時(shí)只有passwd和nick兩個(gè)屬性,那么數(shù)據(jù)為:

只有passwd和nick兩個(gè)屬性的數(shù)據(jù)

當(dāng)產(chǎn)品經(jīng)理需要擴(kuò)展屬性時(shí),新數(shù)據(jù)將版本變?yōu)?,此時(shí)新增了age和sex兩個(gè)數(shù)據(jù),數(shù)據(jù)變?yōu)椋?/p>

新增了age和sex兩個(gè)數(shù)據(jù)的數(shù)據(jù)

優(yōu)點(diǎn):

 

(1)可以隨時(shí)動(dòng)態(tài)擴(kuò)展屬性

(2)新舊兩種數(shù)據(jù)可以同時(shí)存在

(3)遷移數(shù)據(jù)方便,寫個(gè)小程序?qū)⑴f版本ext的改為新版本的ext,并修改version

不足:

(1)ext里的字段無法建立索引

(2)ext里的key值有大量冗余,建議key短一些

改進(jìn):

(1)如果ext里的屬性有索引需求,可能Nosql的如MongoDB會(huì)更適合

方案二:通過擴(kuò)展行的方式來擴(kuò)展屬性

以上面的用戶表為例,可以設(shè)計(jì)為

user(uid, key, value)

初期有name, passwd, nick三個(gè)屬性,那么數(shù)據(jù)為:

初期有name, passwd, nick三個(gè)屬性的數(shù)據(jù)

未來擴(kuò)展了age和sex兩個(gè)屬性,數(shù)據(jù)變?yōu)椋?/p>

擴(kuò)展了age和sex兩個(gè)屬性,數(shù)據(jù)變?yōu)? /></a></p>
<p style=優(yōu)點(diǎn):

 

(1)可以隨時(shí)動(dòng)態(tài)擴(kuò)展屬性

(2)新舊兩種數(shù)據(jù)可以同時(shí)存在

(3)遷移數(shù)據(jù)方便,寫個(gè)小程序可以將新增的屬性加上

(4)各個(gè)屬性上都可以查詢

不足:

(1)key值有大量冗余,建議key短一些

(2)本來一條記錄很多屬性,會(huì)變成多條記錄,行數(shù)會(huì)增加很多

總結(jié)

可以通過“version+ext”或者“key+value”的方式來滿足產(chǎn)品新增列的需求,希望沒有浪費(fèi)你這一分鐘,有收獲就好。

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

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2016-12-16 19:06:02

擴(kuò)展數(shù)據(jù)庫架構(gòu)

2024-06-20 08:03:35

MySQL數(shù)據(jù)表版本

2024-08-05 10:13:59

MySQL大數(shù)據(jù)優(yōu)化

2021-01-21 15:44:03

vlookup函數(shù)數(shù)據(jù)區(qū)域Match函數(shù)

2010-10-27 13:16:41

oracle并行查詢

2010-09-28 09:49:48

SQL字符串

2017-07-04 11:02:40

Oracle新列分區(qū)

2009-07-28 08:36:45

TemplateFie

2015-07-20 17:17:41

SQL Server

2010-09-10 13:37:59

SQLCOUNT()函數(shù)

2022-08-29 08:00:11

哈希表數(shù)組存儲(chǔ)桶

2021-12-22 09:01:23

PythonExcelPython基礎(chǔ)

2010-11-16 11:32:54

ORACLE增加表空間

2009-10-26 13:46:31

VB.NET注冊(cè)表權(quán)限

2013-01-29 10:41:58

Java復(fù)用HTTP

2016-05-13 16:15:05

CDN/星域CDN

2019-09-12 14:47:31

TCPUDP端口

2019-09-12 08:03:56

MySQL索引數(shù)據(jù)庫

2010-04-19 14:23:34

Oracle增加表分區(qū)

2025-02-14 10:03:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)