200并發(fā)算高的了嗎 支撐日活百萬用戶的高并發(fā)系統(tǒng),應(yīng)該如何設(shè)計其數(shù)據(jù)庫架構(gòu)? ?
支撐日活百萬用戶的高并發(fā)系統(tǒng),應(yīng)該如何設(shè)計其數(shù)據(jù)庫架構(gòu)? ?以MySQL為列:1:要支持高并發(fā)系統(tǒng),必須涉及事務(wù),所以數(shù)據(jù)庫引擎必須選擇InnoDB。InnoDB支持事務(wù),事務(wù)級別取決于業(yè)務(wù)。如果業(yè)務(wù)
支撐日活百萬用戶的高并發(fā)系統(tǒng),應(yīng)該如何設(shè)計其數(shù)據(jù)庫架構(gòu)? ?
以MySQL為列:
1:要支持高并發(fā)系統(tǒng),必須涉及事務(wù),所以數(shù)據(jù)庫引擎必須選擇InnoDB。InnoDB支持事務(wù),事務(wù)級別取決于業(yè)務(wù)。如果業(yè)務(wù)數(shù)據(jù)一致性要求非常高,事務(wù)將開啟序列化級別,這將完全隔離事務(wù),但會導(dǎo)致對鎖資源的競爭加劇。MySQL的性能在一定程度上降低了。
2:數(shù)據(jù)庫分為主數(shù)據(jù)庫和從數(shù)據(jù)庫。主數(shù)據(jù)庫負(fù)責(zé)寫入數(shù)據(jù),集群數(shù)據(jù)庫負(fù)責(zé)讀取數(shù)據(jù)。注意主從數(shù)據(jù)庫的數(shù)據(jù)一致性。
3:冷熱數(shù)據(jù)分離,美團(tuán)、饑餓部分設(shè)計采用冷熱數(shù)據(jù)分離。以訂單為例,出庫單的主要業(yè)務(wù)場景是查詢。數(shù)據(jù)查詢越向前,概率越低。這是冷數(shù)據(jù)。正在交易的訂單是熱點(diǎn)數(shù)據(jù),需要隨時查詢和更新。冷數(shù)據(jù)可以放入redis緩存。這將提高查詢效率。
4:數(shù)據(jù)表設(shè)計,充分利用索引查詢。businesssql避免返回?zé)o用的行和列,禁止使用select*query,在查詢時增加限制,并盡可能返回滿足要求的行。對于復(fù)雜的SQL,請考慮拆分SQL。拆分SQL有一個優(yōu)點(diǎn)。對于重復(fù)查詢SQL,將第二次查詢放入MySQL緩沖區(qū),避免重復(fù)磁盤操作,提高訪問性能。
5:子數(shù)據(jù)庫和子表。例如,業(yè)務(wù)數(shù)據(jù)按月份分類。在一定程度上,增加、刪除、修改和檢查的壓力將得到緩解。
希望對您有所幫助。謝謝您。
有多少互聯(lián)網(wǎng)系統(tǒng)確實(shí)需要使用分布式架構(gòu)?
更不用說互聯(lián)網(wǎng)的實(shí)際發(fā)展了,現(xiàn)在即使是面試新生,分布式的問題基本上都是不可避免的。
目前,分布式體系結(jié)構(gòu)具有高并發(fā)性和高穩(wěn)定性的特點(diǎn)。
高并發(fā)意味著當(dāng)單節(jié)點(diǎn)服務(wù)器的性能達(dá)到瓶頸時,可以通過引入nginx和部署多個服務(wù)器節(jié)點(diǎn)來擴(kuò)展,以增加系統(tǒng)的吞吐量。這就是1*n=n的意思。
高穩(wěn)定性意味著,如果單個或部分節(jié)點(diǎn)由于不可預(yù)知的原因發(fā)生故障,則不會影響系統(tǒng)的整體功能服務(wù),即M-N>0(M>N)。對于用戶來說,系統(tǒng)可用性始終是最重要的。
綜上所述,根據(jù)我個人的經(jīng)驗(yàn),目前無論是市場級產(chǎn)品還是公司級產(chǎn)品,只要項(xiàng)目團(tuán)隊(duì)有對服務(wù)質(zhì)量的追求,他們都會以不同的方式向分布式架構(gòu)發(fā)展。
另外,對于一個功能不是很復(fù)雜和龐大的項(xiàng)目組來說,只要在開發(fā)設(shè)計階段一開始就及時引入Memcache或redis作為數(shù)據(jù)緩存,而不是使用服務(wù)器的內(nèi)存,后期切換到分布式系統(tǒng)的過程就會非??臁?/p>
以上是我個人的觀點(diǎn)。歡迎在下面的評論區(qū)與我交流。
我是蘇思亮,來自bat的java開發(fā)工程師。我每天分享科技知識。歡迎您關(guān)注我,與我共同進(jìn)步。