更新時間:2021-02-18 02:07:39 來源:動力節(jié)點 瀏覽2568次
MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL作為目前系統(tǒng)開發(fā)中最常用的數(shù)據(jù)庫之一,因為其速度、可靠性和適應(yīng)性而備受開發(fā)者的青睞。然而為了避免我們在MySQL數(shù)據(jù)庫開發(fā)中遭遇致命的錯誤,我們需要恪守MySQL數(shù)據(jù)庫開發(fā)核心原則。以下所列出的5條MySQL數(shù)據(jù)庫開發(fā)核心原則是所有MySQL數(shù)據(jù)庫開發(fā)時應(yīng)該遵守的。希望可以引起重視。
1.盡量避免在數(shù)據(jù)庫中做運算
“使雞司夜,令貍執(zhí)鼠,皆用其能,上乃無事。”古人都早已參透各司其職,各盡其責(zé)的重要性,作為現(xiàn)代化的數(shù)據(jù)庫開發(fā)人員,我們更應(yīng)該讓數(shù)據(jù)庫做其本職工作,而不是”物盡其用”。所以,我們應(yīng)該盡量避免在數(shù)據(jù)庫中做一些運算,復(fù)雜運算轉(zhuǎn)移到程序端CPU,那里才是它的戰(zhàn)場。我們應(yīng)該避免在數(shù)據(jù)庫中使用復(fù)雜的運算函數(shù),畢竟術(shù)業(yè)有專攻,這不是數(shù)據(jù)庫的強項,處理復(fù)雜運算的任務(wù)就交給CPU好了。
2.盡量控制表字段數(shù)量
單表的字段數(shù)量不能太多,否則會影響數(shù)據(jù)庫的優(yōu)化。根據(jù)業(yè)務(wù)場景進行優(yōu)化調(diào)整,盡量調(diào)整表字段數(shù)少而精,這樣可以使得IO高效,能夠快速的遍歷全表,二區(qū)還能提高數(shù)據(jù)庫的并發(fā)性。
通過特定標準來控制字段數(shù)量,按照單表1G體積,500W行數(shù)據(jù)量進行評估:順序讀1G文件需N秒,單行不超過200Byte,單表不超50個純INT字段,單表不超20個CHAR(10)字段,建議單表字段數(shù)上限控制在20~50個。
3.平衡范式與冗余
數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計也講究平衡,以往我們經(jīng)常說要嚴格遵循三大范式,所以先來說說什么是范式。第一范式:單個字段不可再分。唯一性。第二范式:不存在非主屬性只依賴部分主鍵。消除不完全依賴。第三范式:消除傳遞依賴。用一句話來總結(jié)范式和冗余:冗余是以存儲換取性能,范式是以性能換取存儲。所以,一般在實際工作中冗余更受歡迎一些。模型設(shè)計時,這兩方面的具體的權(quán)衡,首先要以企業(yè)提供的計算能力和存儲資源為基礎(chǔ)。其次,一般互聯(lián)網(wǎng)行業(yè)中都根據(jù)Kimball模式實施數(shù)據(jù)倉庫,建模也是以任務(wù)驅(qū)動的,因此冗余和范式的權(quán)衡符合任務(wù)需要。例如,一份指標數(shù)據(jù),必須在早上8點之前處理完成,但計算的時間窗口又很小,要盡可能減少指標的計算耗時,這時在計算過程中要盡可能減少多表關(guān)聯(lián),模型設(shè)計時需要做更多的冗余。
4.拒絕三個B
由于數(shù)據(jù)庫的并發(fā)就像城市交通,呈非線性增長,這就要求我們在做數(shù)據(jù)庫開發(fā)的時候一定要注意高并發(fā)下的瓶頸,防止因高并發(fā)造成數(shù)據(jù)庫癱瘓。
這里的3B是指:
大SQL(BIG SQL):要減少
大事務(wù)(BIG Transaction)
大批量(BIG Batch)
5.盡量控制單表數(shù)據(jù)量
大家都知道單表數(shù)據(jù)量過大后會影響數(shù)據(jù)查詢效率,嚴重情況下會導(dǎo)致整個庫都卡住。一般情況下,按照一年內(nèi)單表數(shù)據(jù)量預(yù)估:純INT不超過1000W,含CHAR不超過500W,同時要盡量做好合理的分表,使單表數(shù)據(jù)量不超載,常見的分表策略有:通過USERID來分表(根據(jù)ID區(qū)間分表):在金融行業(yè)應(yīng)用較多,用戶量大、用戶特征明顯。按DATE分表(按天、周、月分表):在電信行業(yè)應(yīng)用非常多,如用戶上網(wǎng)記錄表、用戶短信表、話單表等。按AREA分表(省、市、區(qū)分表)。
實際上,這些MySQL數(shù)據(jù)庫開發(fā)的核心原則或者說MySQL數(shù)據(jù)庫開發(fā)的注意事項在網(wǎng)上有很多大同小異的版本,其實主要還是前輩用引以為鑒的歷史事件得出的寶貴的經(jīng)驗教訓(xùn)。準確的來說,這些原則就是MySQL數(shù)據(jù)庫開發(fā)的紅線,一旦觸及,可能會發(fā)生意想不到的后果。所以,小伙伴們請謹記這些MySQL數(shù)據(jù)庫開發(fā)的核心原則,使得我們的MySQL數(shù)據(jù)庫開發(fā)更加合理更加規(guī)范。在后面的MySQL教程中,對這些原則有很好的講解。
相關(guān)閱讀