前面章節(jié),我們介紹了很多數(shù)據(jù)庫的優(yōu)化措施。但是在實(shí)際生產(chǎn)環(huán)境中,由于數(shù)據(jù)庫本身的性能局限,就必須要對前臺(tái)的應(yīng)用進(jìn)行一些優(yōu)化,來降低數(shù)據(jù)庫的訪問壓力
1.使用連接池
對于訪問數(shù)據(jù)庫來說,建立連接的代價(jià)是比較昂貴的,因?yàn)槲覀冾l繁的創(chuàng)建關(guān)閉連接,是比較耗費(fèi)資源的,我們有必要建立 數(shù)據(jù)庫連接池,以提高訪問的性能
2.減少對MySQL的訪問
2.1 避免對數(shù)據(jù)進(jìn)行重復(fù)檢索
在編寫應(yīng)用代碼時(shí),需要能夠理清對數(shù)據(jù)庫的訪問邏輯。能夠一次連接就獲取到結(jié)果的,就不用兩次連接,這樣可以大大減少對數(shù)據(jù)庫無用的重復(fù)請求。
比如 ,需要獲取書籍的id 和name字段 , 則查詢?nèi)缦拢?/p>
select id , name from tb_book;
之后,在業(yè)務(wù)邏輯中有需要獲取到書籍狀態(tài)信息, 則查詢?nèi)缦拢?/p>
select id , status from tb_book;
這樣,就需要向數(shù)據(jù)庫提交兩次請求,數(shù)據(jù)庫就要做兩次查詢操作。其實(shí)完全可以用一條SQL語句得到想要的結(jié)果。
select id, name , status from tb_book;
2.2 增加cache 層
在應(yīng)用中,我們可以在應(yīng)用中增加 緩存 層來達(dá)到減輕數(shù)據(jù)庫負(fù)擔(dān)的目的。緩存層有很多種,也有很多實(shí)現(xiàn)方式,只要能達(dá)到降低數(shù)據(jù)庫的負(fù)擔(dān)又能滿足應(yīng)用需求就可以。
因此可以部分?jǐn)?shù)據(jù)從數(shù)據(jù)庫中抽取出來放到應(yīng)用端以文本方式存儲(chǔ), 或者使用框架(Mybatis, Hibernate)提供的一級(jí)緩存/二級(jí)緩存,或者使用redis數(shù)據(jù)庫來緩存數(shù)據(jù) 。
3. 負(fù)載均衡
負(fù)載均衡是應(yīng)用中使用非常普遍的一種優(yōu)化方法,它的機(jī)制就是利用某種均衡算法,將固定的負(fù)載量分布到不同的服務(wù)器上, 以此來降低單臺(tái)服務(wù)器的負(fù)載,達(dá)到優(yōu)化的效果。
3.1 利用MySQL復(fù)刻分流查詢
通過MySQL的主從復(fù)制,實(shí)現(xiàn)讀寫分離,使增刪改操作走主節(jié)點(diǎn),查詢操作走從節(jié)點(diǎn),從而可以降低單臺(tái)服務(wù)器的讀寫壓力

3.2 采用分布式數(shù)據(jù)庫架構(gòu)
分布式數(shù)據(jù)庫架構(gòu)適合大數(shù)據(jù)量、負(fù)載高的情況,它有良好的拓展性和高可用性。通過在多臺(tái)服務(wù)器之間分布數(shù)據(jù),可以實(shí)現(xiàn)在多臺(tái)服務(wù)器之間的負(fù)載均衡,提高訪問效率。