mysql 數(shù)據(jù)庫設(shè)計
更新時間:2009年06月14日 14:42:14 作者:
大家都知道m(xù)ysql的myisam表適合讀操作大,寫操作少;表級鎖表
innodb表正好相反;行級鎖表
互聯(lián)網(wǎng)服務(wù),不算支付性的服務(wù)外,互動產(chǎn)品,新聞系統(tǒng)等等一般都是讀多,寫少。用myisam表比較合適。
表的設(shè)計
定長表:所有列的字段長度都是定長的。可以去查mysql的手冊不定長字段是VARCHAR、BLOB或TEXT。int char都是定長的,定長表占用空間會大。
動態(tài)表:就是字段不是都定長的。
定長表要比動態(tài)表檢索速度快。
軟件系統(tǒng)的設(shè)計習(xí)慣是把每張表都分清很明確的功能,比如用戶表都是用戶信息,如果需要同時從留言表取數(shù)據(jù),又從用戶表取用戶信息的時候,就會采用聯(lián)合查 詢,有的時候一些操作還會用left,join等各種復(fù)雜sql語句,沒準還要用mysql的函數(shù)。如果是針對訪問量,讀取量很大的互聯(lián)網(wǎng)服務(wù)時,同時并 發(fā)去讀,數(shù)據(jù)量又大,很可怕。最好是如果數(shù)據(jù)不會修改,在常用的表上有冗余字段,能夠做到一次讀,把數(shù)據(jù)都拿到;可以有冗余的寫操作,但減少復(fù)雜的查詢操 作。
在設(shè)計表的時候要將這個表的所有字段類型占用的字節(jié)數(shù)求和,并乘以你的預(yù)期(如:存儲100W數(shù)據(jù)量),就是整張表未來會占用容量。
拆表 拆庫
拆表就是將一張表復(fù)制N多張,里面分別存放不用內(nèi)容的數(shù)據(jù),數(shù)據(jù)的存放是用HASH算法來決定放入哪張表。
例如用戶表user,傳統(tǒng)情況就是一張表,拆表就是將表復(fù)制為user_01,user_02等里面都存放了格式一樣的不同用戶數(shù)據(jù)。
拆庫和拆表類似,就是庫的復(fù)制。
拆表或拆庫有很多的HASH算法,主要目的就是減少表的數(shù)據(jù)量,用算法保證每個表的數(shù)據(jù)量平均,請求,讀寫操作被分攤降低壓力,而且安全,出了問題最多是一部分用戶受影響。缺點就是檢索不方便,需要另想辦法。
很多網(wǎng)站為了前期省事都會采用discuz的產(chǎn)品,如bbs,blog等,網(wǎng)上有不少關(guān)于這個產(chǎn)品的介紹和優(yōu)化方法,沒細研究過,聽過一些網(wǎng)站介紹他們的 優(yōu)化方法時,對于數(shù)據(jù)庫主要是采用主從的方法,將數(shù)據(jù)庫的讀寫分離來提高性能,但是個人覺得這種辦法在數(shù)據(jù)量到了規(guī)模的時候就OVER了,并發(fā)和讀寫操作 沒提升,數(shù)據(jù)也是會逐漸累計超過限制。
互聯(lián)網(wǎng)服務(wù)由于要應(yīng)對大數(shù)據(jù)量,大請求量,所以在設(shè)計開發(fā)的時候就不要太學(xué)院派,不要力圖達到數(shù)據(jù)庫、程序的設(shè)計“優(yōu)美”,性能是最要緊的。
互聯(lián)網(wǎng)服務(wù),不算支付性的服務(wù)外,互動產(chǎn)品,新聞系統(tǒng)等等一般都是讀多,寫少。用myisam表比較合適。
表的設(shè)計
定長表:所有列的字段長度都是定長的。可以去查mysql的手冊不定長字段是VARCHAR、BLOB或TEXT。int char都是定長的,定長表占用空間會大。
動態(tài)表:就是字段不是都定長的。
定長表要比動態(tài)表檢索速度快。
軟件系統(tǒng)的設(shè)計習(xí)慣是把每張表都分清很明確的功能,比如用戶表都是用戶信息,如果需要同時從留言表取數(shù)據(jù),又從用戶表取用戶信息的時候,就會采用聯(lián)合查 詢,有的時候一些操作還會用left,join等各種復(fù)雜sql語句,沒準還要用mysql的函數(shù)。如果是針對訪問量,讀取量很大的互聯(lián)網(wǎng)服務(wù)時,同時并 發(fā)去讀,數(shù)據(jù)量又大,很可怕。最好是如果數(shù)據(jù)不會修改,在常用的表上有冗余字段,能夠做到一次讀,把數(shù)據(jù)都拿到;可以有冗余的寫操作,但減少復(fù)雜的查詢操 作。
在設(shè)計表的時候要將這個表的所有字段類型占用的字節(jié)數(shù)求和,并乘以你的預(yù)期(如:存儲100W數(shù)據(jù)量),就是整張表未來會占用容量。
拆表 拆庫
拆表就是將一張表復(fù)制N多張,里面分別存放不用內(nèi)容的數(shù)據(jù),數(shù)據(jù)的存放是用HASH算法來決定放入哪張表。
例如用戶表user,傳統(tǒng)情況就是一張表,拆表就是將表復(fù)制為user_01,user_02等里面都存放了格式一樣的不同用戶數(shù)據(jù)。
拆庫和拆表類似,就是庫的復(fù)制。
拆表或拆庫有很多的HASH算法,主要目的就是減少表的數(shù)據(jù)量,用算法保證每個表的數(shù)據(jù)量平均,請求,讀寫操作被分攤降低壓力,而且安全,出了問題最多是一部分用戶受影響。缺點就是檢索不方便,需要另想辦法。
很多網(wǎng)站為了前期省事都會采用discuz的產(chǎn)品,如bbs,blog等,網(wǎng)上有不少關(guān)于這個產(chǎn)品的介紹和優(yōu)化方法,沒細研究過,聽過一些網(wǎng)站介紹他們的 優(yōu)化方法時,對于數(shù)據(jù)庫主要是采用主從的方法,將數(shù)據(jù)庫的讀寫分離來提高性能,但是個人覺得這種辦法在數(shù)據(jù)量到了規(guī)模的時候就OVER了,并發(fā)和讀寫操作 沒提升,數(shù)據(jù)也是會逐漸累計超過限制。
互聯(lián)網(wǎng)服務(wù)由于要應(yīng)對大數(shù)據(jù)量,大請求量,所以在設(shè)計開發(fā)的時候就不要太學(xué)院派,不要力圖達到數(shù)據(jù)庫、程序的設(shè)計“優(yōu)美”,性能是最要緊的。
您可能感興趣的文章:
- PHP+MySQL投票系統(tǒng)的設(shè)計和實現(xiàn)分享
- PHP+Mysql樹型結(jié)構(gòu)(無限分類)數(shù)據(jù)庫設(shè)計的2種方式實例
- MYSQL 數(shù)據(jù)庫命名與設(shè)計規(guī)范
- MySQL分表實現(xiàn)上百萬上千萬記錄分布存儲的批量查詢設(shè)計模式詳解
- MySQL 數(shù)據(jù)庫設(shè)計復(fù)習(xí)筆記及項目實戰(zhàn)
- 基于PHP+MySQL的聊天室設(shè)計
- MySQL和MongoDB設(shè)計實例對比分析
- 如何設(shè)計高效合理的MySQL查詢語句
- MySQL 設(shè)計和命令行模式下建立詳解
相關(guān)文章
mysql建表報錯:invalid?default?value?for?'date'的解決方
最近遇到一個這樣的問題,出現(xiàn)了invalid default value for 'end_date'錯誤,所以下面這篇文章主要給大家介紹了關(guān)于mysql建表報錯:invalid?default?value?for?'date'的解決方法,需要的朋友可以參考下2022-12-12MySQL數(shù)據(jù)庫常用操作和技巧(DBA必備知識)
MySQL數(shù)據(jù)庫可以說是DBA們最常見和常用的數(shù)據(jù)庫之一,為了方便大家使用,老MySQL DBA總結(jié)了MySQL數(shù)據(jù)庫最常見和最常使用的一些經(jīng)驗和技巧,與分享大家!2011-03-03怎么重置mysql的自增列AUTO_INCREMENT初時值
怎么重置mysql的自增列想必有很多的朋友都不會吧,下面與大家分享下常用的幾種方法,不懂的朋友可以了解下哈,希望對大家有所幫助2013-06-06

MySQL數(shù)據(jù)庫優(yōu)化經(jīng)驗詳談(服務(wù)器普通配置)
同時在線訪問量繼續(xù)增大 對于1G內(nèi)存的服務(wù)器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的服務(wù)器卡一下 這個問題曾經(jīng)困擾了我半個多月MySQL使用是很具伸縮性的算法,因此你通常能用很少的內(nèi)存運行或給MySQL更多的被存以得到更好的性能。
2011-03-03