mysql - 為什么數(shù)據(jù)庫(kù)讀寫分離能提高數(shù)據(jù)庫(kù)的性能?
問(wèn)題描述
為什么讀寫分離可以提高數(shù)據(jù)庫(kù)的性能請(qǐng)看上面的博客。根據(jù)數(shù)據(jù)庫(kù)常識(shí),讀寫分離確實(shí)可以提高數(shù)據(jù)庫(kù)的性能,但各位對(duì)它的底層原理不知道是否理解。比如,一臺(tái)讀,一臺(tái)寫,但數(shù)據(jù)仍然需要同步的,不然這個(gè)系統(tǒng)就沒(méi)了意義,那好了,同步的時(shí)候難道就不是一個(gè)寫操作嗎?那么實(shí)質(zhì)上不是一樣?
問(wèn)題解答
回答1:但是讀的時(shí)候不需要同步啊,一臺(tái)讀的性能高,一臺(tái)寫的性能高。讀寫分離適用與讀遠(yuǎn)大于寫的場(chǎng)景。
MySQL 使用了很多的數(shù)據(jù)庫(kù)存儲(chǔ)引擎,每個(gè)引擎既有優(yōu)點(diǎn)也有缺點(diǎn)。有些不支持事物,但是性能和速度很高;有些讀取很快,但是寫入很慢,而有些則正好相反;…… 進(jìn)行主從讀寫分離可以充分發(fā)揮每個(gè)數(shù)據(jù)庫(kù)引擎的優(yōu)點(diǎn)。
你的疑問(wèn):但數(shù)據(jù)仍然需要同步的。其實(shí)這也不算是同步,因?yàn)樗械臄?shù)據(jù)都是單項(xiàng)的。應(yīng)用層的數(shù)據(jù)是直接寫入主庫(kù),但是從庫(kù)的數(shù)據(jù)則是從 binlog 恢復(fù)的,而且,最重要區(qū)別在于主庫(kù)向從庫(kù)發(fā)送 binlog 是異步的,從庫(kù)恢復(fù)數(shù)據(jù)也是異步的。
就算是沒(méi)有從庫(kù),那么主庫(kù)也需要把 binlog 數(shù)據(jù)寫入到硬盤或者其它的電腦,以防止數(shù)據(jù)庫(kù)故障。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題后,DBA 也只能從 binlog 中恢復(fù)之前的數(shù)據(jù)。
在你的描述中:“一臺(tái)讀,一臺(tái)寫”。我才你可能是個(gè)初學(xué)者吧,或者沒(méi)有參與過(guò)真實(shí)的項(xiàng)目。真正線上的項(xiàng)目都是 N 臺(tái)讀寫,M 臺(tái)備份。做讀寫分離后就是 N 臺(tái)讀,N 臺(tái)寫,M 臺(tái)備份;或者 1 臺(tái)讀,1 臺(tái)寫,M 臺(tái)備份。
回答2:讀寫分離的主要目的是分擔(dān)服務(wù)器壓力,適用于數(shù)據(jù)實(shí)時(shí)性要求不那么嚴(yán)格的業(yè)務(wù),可以根據(jù)需要分別配置不同的系統(tǒng)參數(shù)來(lái)應(yīng)對(duì)不同的讀寫需求,進(jìn)而提高整個(gè)業(yè)務(wù)系統(tǒng)的整體性能!
相關(guān)文章:
1. python - flask _sqlalchemy 能否用中文作為索引條件2. nignx - docker內(nèi)nginx 80端口被占用3. java - 阿里的開發(fā)手冊(cè)中為什么禁用map來(lái)作為查詢的接受類?4. 跟蹤器怎么開啟無(wú)反應(yīng)5. dockerfile - [docker build image失敗- npm install]6. android - 百度地圖加載完成監(jiān)聽7. docker api 開發(fā)的端口怎么獲???8. python3.x - git bash如何運(yùn)行.bat文件?9. dockerfile - 我用docker build的時(shí)候出現(xiàn)下邊問(wèn)題 麻煩幫我看一下10. macos - mac下docker如何設(shè)置代理
