數(shù)據(jù)庫的開發(fā)對(duì)于后臺(tái)編程程序員來說是必備能力之一了,而今天我們就一起來了解一下,關(guān)于數(shù)據(jù)庫開發(fā)的設(shè)計(jì)規(guī)范都有哪些類型,西安北大青鳥希望通過對(duì)本文的閱讀,大家對(duì)于數(shù)據(jù)庫開發(fā)有更多的了解。

目前成都創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、北流網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、數(shù)據(jù)庫命令規(guī)范所有數(shù)據(jù)庫對(duì)象名稱必須使用小寫字母并用下劃線分割所有數(shù)據(jù)庫對(duì)象名稱禁止使用mysql保留關(guān)鍵字(如果表名中包含關(guān)鍵字查詢時(shí),需要將其用單引號(hào)括起來)數(shù)據(jù)庫對(duì)象的命名要能做到見名識(shí)意,并且后不要超過32個(gè)字符臨時(shí)庫表必須以tmp_為前綴并以日期為后綴,備份表必須以bak_為前綴并以日期(時(shí)間戳)為后綴所有存儲(chǔ)相同數(shù)據(jù)的列名和列類型必須一致(一般作為關(guān)聯(lián)列,如果查詢時(shí)關(guān)聯(lián)列類型不一致會(huì)自動(dòng)進(jìn)行數(shù)據(jù)類型隱式轉(zhuǎn)換,會(huì)造成列上的索引失效,導(dǎo)致查詢效率降低)二、數(shù)據(jù)庫基本設(shè)計(jì)規(guī)范1、所有表必須使用Innodb存儲(chǔ)引擎沒有特殊要求(即Innodb無法滿足的功能如:列存儲(chǔ),存儲(chǔ)空間數(shù)據(jù)等)的情況下,所有表必須使用Innodb存儲(chǔ)引擎(mysql5.5之前默認(rèn)使用Myisam,5.6以后默認(rèn)的為Innodb)Innodb支持事務(wù),支持行級(jí)鎖,更好的恢復(fù)性,高并發(fā)下性能更好2、數(shù)據(jù)庫和表的字符集統(tǒng)一使用UTF8兼容性更好,統(tǒng)一字符集可以避免由于字符集轉(zhuǎn)換產(chǎn)生的亂碼,不同的字符集進(jìn)行比較前需要進(jìn)行轉(zhuǎn)換會(huì)造成索引失效3、所有表和字段都需要添加注釋使用comment從句添加表和列的備注從一開始就進(jìn)行數(shù)據(jù)字典的維護(hù)4、盡量控制單表數(shù)據(jù)量的大小,建議控制在500萬以內(nèi)500萬并不是MySQL數(shù)據(jù)庫的限制,過大會(huì)造成修改表結(jié)構(gòu),備份,恢復(fù)都會(huì)有很大的問題可以用歷史數(shù)據(jù)歸檔(應(yīng)用于日志數(shù)據(jù)),分庫分表(應(yīng)用于業(yè)務(wù)數(shù)據(jù))等手段來控制數(shù)據(jù)量大小5、謹(jǐn)慎使用MySQL分區(qū)表分區(qū)表在物理上表現(xiàn)為多個(gè)文件,在邏輯上表現(xiàn)為一個(gè)表謹(jǐn)慎選擇分區(qū)鍵,跨分區(qū)查詢效率可能更低建議采用物理分表的方式管理大數(shù)據(jù)6、盡量做到冷熱數(shù)據(jù)分離,減小表的寬度MySQL限制每個(gè)表多存儲(chǔ)4096列,并且每一行數(shù)據(jù)的大小不能超過65535字節(jié)減少磁盤IO,保證熱數(shù)據(jù)的內(nèi)存緩存命中率(表越寬,把表裝載進(jìn)內(nèi)存緩沖池時(shí)所占用的內(nèi)存也就越大,也會(huì)消耗更多的IO)更有效的利用緩存,避免讀入無用的冷數(shù)據(jù)經(jīng)常一起使用的列放到一個(gè)表中(避免更多的關(guān)聯(lián)操作)
Log File物理結(jié)構(gòu)
從 ib_logfile0和 ib_logfile1這兩個(gè)文件的物理結(jié)構(gòu)可以看出,在Log Header部分還是有些許差異的, ib_logfile0會(huì)多一些額外的信息,主要是checkpoint信息。
并且每個(gè)Block的單位是512字節(jié),對(duì)應(yīng)到磁盤每個(gè)扇區(qū)也是512字節(jié),因此redo log寫磁盤是原子寫,保證能夠?qū)懗晒Γ幌駃ndex page一樣需要double write來保證安全寫入。
我們依次從上到下來看每個(gè)Block的結(jié)構(gòu)
Log File Header Block
Log Goup ID,可能會(huì)配置多個(gè)redo組,每個(gè)組對(duì)應(yīng)一個(gè)id,當(dāng)前都是0,占用4字節(jié)
Start LSN,這個(gè)redo log文件開始日志的lsn,占用8字節(jié)
Log File Number,總是為0,占用4字節(jié)
Created By,備份程序所占用的字節(jié)數(shù),占用32字節(jié)
另外在ib_logfile0中會(huì)有兩個(gè)checkpoint block,分別是 LOG_CHECKPOINT_1/ LOG_CHECKPOINT_2,兩個(gè)記錄InnoDB Checkpoint信息的字段,分別從文件頭的第二個(gè)和第四個(gè)block開始記錄,并且只在每組log的第一個(gè)文件中存在,組內(nèi)其他文件雖然沒有checkpoint相關(guān)信息,但是也會(huì)預(yù)留相應(yīng)的空間出來。這里為什么有兩個(gè)checkpoint的呢?原因是設(shè)計(jì)為交替寫入,避免因?yàn)榻橘|(zhì)失敗而導(dǎo)致無法找到可用的checkpoint的情況。
Log blocks
請(qǐng)點(diǎn)擊輸入圖片描述
log block結(jié)構(gòu)分為日志頭段、日志記錄、日志尾部
Block Header,占用12字節(jié)
Data部分
Block tailer,占用4字節(jié)
Block Header
這個(gè)部分是每個(gè)Block的頭部,主要記錄的塊的信息
Block Number,表示這是第幾個(gè)block,占用4字節(jié),是通過LSN計(jì)算得來的,占用4字節(jié)
Block data len,表示該block中有多少字節(jié)已經(jīng)被使用了,占用2字節(jié)
First Rec offet,表示該block中作為第一個(gè)新的mtr開始的偏移量,占用2字節(jié)
Checkpoint number,表示該log block最后被寫入時(shí)的檢查點(diǎn)的值,占用4字節(jié)
《mysql設(shè)計(jì)規(guī)范》
1:數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):邏輯設(shè)計(jì) – 物理設(shè)計(jì)
2:實(shí)際工作中:邏輯設(shè)計(jì) + 物理設(shè)計(jì)
3:物理設(shè)計(jì):表名,字段名,字段類型
4:磁盤IO和操作系統(tǒng)類型,對(duì)mysql的性能是非常大的
能幫助到你,很榮幸!望采納,謝謝!
當(dāng)前標(biāo)題:mysql怎么設(shè)計(jì)規(guī)范 mysql設(shè)計(jì)原則
當(dāng)前網(wǎng)址:http://www.chinadenli.net/article24/dooshje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站制作、、動(dòng)態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)