mysql - 為什么數(shù)據(jù)庫讀寫分離能提高數(shù)據(jù)庫的性能?
問題描述
為什么讀寫分離可以提高數(shù)據(jù)庫的性能請看上面的博客。根據(jù)數(shù)據(jù)庫常識,讀寫分離確實(shí)可以提高數(shù)據(jù)庫的性能,但各位對它的底層原理不知道是否理解。比如,一臺讀,一臺寫,但數(shù)據(jù)仍然需要同步的,不然這個系統(tǒng)就沒了意義,那好了,同步的時候難道就不是一個寫操作嗎?那么實(shí)質(zhì)上不是一樣?
問題解答
回答1:但是讀的時候不需要同步啊,一臺讀的性能高,一臺寫的性能高。讀寫分離適用與讀遠(yuǎn)大于寫的場景。
MySQL 使用了很多的數(shù)據(jù)庫存儲引擎,每個引擎既有優(yōu)點(diǎn)也有缺點(diǎn)。有些不支持事物,但是性能和速度很高;有些讀取很快,但是寫入很慢,而有些則正好相反;…… 進(jìn)行主從讀寫分離可以充分發(fā)揮每個數(shù)據(jù)庫引擎的優(yōu)點(diǎn)。
你的疑問:但數(shù)據(jù)仍然需要同步的。其實(shí)這也不算是同步,因?yàn)樗械臄?shù)據(jù)都是單項(xiàng)的。應(yīng)用層的數(shù)據(jù)是直接寫入主庫,但是從庫的數(shù)據(jù)則是從 binlog 恢復(fù)的,而且,最重要區(qū)別在于主庫向從庫發(fā)送 binlog 是異步的,從庫恢復(fù)數(shù)據(jù)也是異步的。
就算是沒有從庫,那么主庫也需要把 binlog 數(shù)據(jù)寫入到硬盤或者其它的電腦,以防止數(shù)據(jù)庫故障。當(dāng)數(shù)據(jù)庫出現(xiàn)問題后,DBA 也只能從 binlog 中恢復(fù)之前的數(shù)據(jù)。
在你的描述中:“一臺讀,一臺寫”。我才你可能是個初學(xué)者吧,或者沒有參與過真實(shí)的項(xiàng)目。真正線上的項(xiàng)目都是 N 臺讀寫,M 臺備份。做讀寫分離后就是 N 臺讀,N 臺寫,M 臺備份;或者 1 臺讀,1 臺寫,M 臺備份。
回答2:讀寫分離的主要目的是分擔(dān)服務(wù)器壓力,適用于數(shù)據(jù)實(shí)時性要求不那么嚴(yán)格的業(yè)務(wù),可以根據(jù)需要分別配置不同的系統(tǒng)參數(shù)來應(yīng)對不同的讀寫需求,進(jìn)而提高整個業(yè)務(wù)系統(tǒng)的整體性能!
相關(guān)文章:
1. python - scrapy 如何組合2個不同頁面的數(shù)據(jù),一并存儲2. mysql優(yōu)化 - mysql 一張表如果不能確保字段列長度一致,是不是就不需要用到char。3. node.js - mysql如何通過knex查詢今天和七天內(nèi)的匯總數(shù)據(jù)4. javascript - 用jsonp抓取qq音樂總是說回調(diào)函數(shù)沒有定義5. javascript - 新浪微博網(wǎng)頁版的字?jǐn)?shù)限制是怎么做的6. sublime可以用其他編譯器替換嗎?7. python2.7 - python 函數(shù)或者類 代碼的執(zhí)行順序8. 使用python中的pandas求每個值占該列的比例9. python - 多態(tài)調(diào)用方法時卻顯示bound method...10. mysql 怎么做到update只更新一行數(shù)據(jù)?
