人(rén)
已閱讀(dú)
已閱讀(dú)
MySQL數(shù)據庫如(rú)何優化(huà'∑§φ)主從(cóng)延時(shí)
來(lái)源:lexintech.com 發布時(sΩ γhí)間(jiān):2019-05-17
MySQL數(shù)據庫是(shì)APP開(kāi)發常用(yòng)的(de)數(shù)據,由于其體(tǐ)積小(xiǎo)→ 、速度快(kuài)、總體(tǐ)擁有(Ω§↑yǒu)成本低(dī),尤其是(shì)開(kβ"φāi)放(fàng)源碼這(zhè)一(yī)特&<點,一(yī)般中小(xiǎo)型網站(zhàn)或中小φ×(xiǎo)型APP的(de)開(kāi)發®π±都(dōu)選擇 MySQL 作(zuò)為(±♠wèi)數(shù)據庫。
MySQL主從(cóng)複制(zhì),讀(dú)寫分(fēn)離♥↑←×(lí)是(shì)互聯網常見(jiàn)的(de±∏)數(shù)據庫架構,該架構最令人(rén)诟病的(dγ®✔e)地(dì)方就(jiù)是(shì),在數(shù)據量較大(dà)∏ 并發量較大(dà)的(de)場(chǎng)景下(xià),主從(c ¥±&óng)延時(shí)會(huì)比較嚴重。


為(wèi)什(shén)麽MySQL數( αshù)據庫主從(cóng)延時(shí δ)這(zhè)麽大(dà)呢(ne)?因為(wèi)MySQL使用(yòng)Ω∏↔單線程重放(fàng)RelayLog。所以,如(rú)何縮短₹γ&(duǎn)重放(fàng)時(shí)間(jiān),就(jiù)是&♠←<(shì)優化(huà)主從(cóng)延時(shí)的(d Ωe)關鍵點。一(yī)般我們會(huì)采用(yòng)多(≥↑₽duō)線程并行(xíng)重放(fàng)RelaπβyLog來(lái)縮短(duǎn)時(shí)間(jiān)§♥。需要(yào)考慮如(rú)何分(fēn)割♣∞☆RelayLog,才能(néng)夠讓多(duō)個(gè)數(₩≠©±shù)據庫實例,多(duō)個(gè)線程并行(™→xíng)重放(fàng)RelayLog,不(bù)會(huì)♠&★出現(xiàn)不(bù)一(yī)緻。
相(xiàng)同庫上(shàng)的(de)寫操★₩作(zuò),用(yòng)相(xiàng)同的(de)線程來(lái)重放(≠÷↔fàng)RelayLog;不(bù)同庫上&✘☆ (shàng)的(de)寫操作(zuò),可(kě)以并發用(yòng)多(d→σ×uō)個(gè)線程并發來(lái)重放(fàng)RelayLog☆☆。設計(jì)一(yī)個(gè)哈希算(suà ♣₩↑n)法,hash(db-name) % thread-n±♦£um,庫名hash之後再模上(shàng)線程數(sh₽≈φù),就(jiù)能(néng)很(hěn)輕©¶易做(zuò)到(dào),同一(yī)個(gè)庫上(shàng)的(d$☆™εe)寫操作(zuò),被同一(yī)個(gè)重放(fàng)線程串行♦δ✔§(xíng)執行(xíng)。
相(xiàng)同庫上(shàng)的(de)寫操★₩作(zuò),用(yòng)相(xiàng)同的(de)線程來(lái)重放(≠÷↔fàng)RelayLog;不(bù)同庫上&✘☆ (shàng)的(de)寫操作(zuò),可(kě)以并發用(yòng)多(d→σ×uō)個(gè)線程并發來(lái)重放(fàng)RelayLog☆☆。設計(jì)一(yī)個(gè)哈希算(suà ♣₩↑n)法,hash(db-name) % thread-n±♦£um,庫名hash之後再模上(shàng)線程數(sh₽≈φù),就(jiù)能(néng)很(hěn)輕©¶易做(zuò)到(dào),同一(yī)個(gè)庫上(shàng)的(d$☆™εe)寫操作(zuò),被同一(yī)個(gè)重放(fàng)線程串行♦δ✔§(xíng)執行(xíng)。
但(dàn)是(shì)有(yǒu)些(xi€≤ē)公司對(duì)MySQL的(de)使α¥用(yòng)是(shì)“單庫多(duō)表&r∑Ω← dquo;,如(rú)果是(shì)這(zh≤'εè)樣的(de)話(huà),仍然隻有(y≥$ǒu)一(yī)個(gè)庫,還(hái)是(shì)不(bù)能(néφ↕↓ng)提高(gāo)RelayLog的(de)重放(fàng)速度 。
那(nà)麽,“單庫多(duō)表&rd↔™"quo;的(de)場(chǎng)景,多(duō)線程并行₩₽£(xíng)重放(fàng)RelayLog還(h∑←ái)能(néng)怎麽優化(huà)呢¥'¥(ne)?
即使隻有(yǒu)一(yī)個(gè)庫,事(shì)務在主庫上(shàng<↕×)也(yě)是(shì)并發執行(xíng)的α★(de),既然在主庫上(shàng)可(kě)以并行(xíng)執行(← ♦xíng),在從(cóng)庫上(shàng)也(yě)應該能(né←₩&ng)夠并行(xíng)執行(xíng)。将主庫上σ™♠(shàng)同時(shí)并行(xíng)執行(xíng)的©↑(de)事(shì)務,分(fēn)為(wèi¶★± )一(yī)組,編一(yī)個(gè)号,這(zhè)些(xiē)事(♦↔✔shì)務在從(cóng)庫上(shàng)的(de)回放≈↑<↔(fàng)可(kě)以并行(xíng)執行(xíng)(事(shì)務在主Ω∞✘庫上(shàng)的(de)執行(xíng)都(dōu)進入到(dào)pre>₩pare階段,說(shuō)明(míng)事('®♦shì)務之間(jiān)沒有(yǒu)沖突,否則就(jiù)不(bù)可("β<•kě)能(néng)提交),沒錯(cuò),MySQL正是(shìγ♣♣→)這(zhè)麽做(zuò)的(de)。
即使隻有(yǒu)一(yī)個(gè)庫,事(shì)務在主庫上(shàng<↕×)也(yě)是(shì)并發執行(xíng)的α★(de),既然在主庫上(shàng)可(kě)以并行(xíng)執行(← ♦xíng),在從(cóng)庫上(shàng)也(yě)應該能(né←₩&ng)夠并行(xíng)執行(xíng)。将主庫上σ™♠(shàng)同時(shí)并行(xíng)執行(xíng)的©↑(de)事(shì)務,分(fēn)為(wèi¶★± )一(yī)組,編一(yī)個(gè)号,這(zhè)些(xiē)事(♦↔✔shì)務在從(cóng)庫上(shàng)的(de)回放≈↑<↔(fàng)可(kě)以并行(xíng)執行(xíng)(事(shì)務在主Ω∞✘庫上(shàng)的(de)執行(xíng)都(dōu)進入到(dào)pre>₩pare階段,說(shuō)明(míng)事('®♦shì)務之間(jiān)沒有(yǒu)沖突,否則就(jiù)不(bù)可("β<•kě)能(néng)提交),沒錯(cuò),MySQL正是(shìγ♣♣→)這(zhè)麽做(zuò)的(de)。
- 上(shàng)一(yī)篇:APP産品推廣的(de)幾個(gè)關鍵點
- 下(xià)一(yī)篇:ToB産品和(hé)ToC産品之間(jiān)的(de)差✘≤↕ 别
- > 開(kāi)發網站(zhàn)或APP是(shì)用(yòng)J≥δε←AVA好(hǎo)還(hái)是(shì)PHP好(hǎo)?
- > 找外(wài)包公司開(kāi)發APP有(y★← ǒu)哪些(xiē)注意事(shì)項?
- > 想創業(yè),别再盲目開(kāi)發APP了(le)!
- > 開(kāi)發一(yī)個(gè)APP多(duō)少(shǎo)錢(qián ÷)?
- > 開(kāi)發一(yī)個(gè)APP多(duō)少(shǎo)錢(qián ©φ)?
- > 跟外(wài)包公司合作(zuò)怎麽樣才能(néng)做(zuδ<•ò)好(hǎo)一(yī)款APP?