日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

數(shù)據(jù)庫讀寫分離,主從 讀寫分離

程序員看過來,每天一道大廠Java面試真題分享:主從數(shù)據(jù)庫不一致如何解決?答案:場(chǎng)景描述,對(duì)于主從庫,讀寫分離,如果主從庫更新同步有時(shí)差,就會(huì)導(dǎo)致主從庫數(shù)據(jù)的不一致1、忽略這個(gè)數(shù)據(jù)不一致,在數(shù)據(jù)一致性要求不高的業(yè)務(wù)下,未必需要時(shí)時(shí)一致性 。
DB讀寫分離情況下,如何解決緩存和數(shù)據(jù)庫不一致性問題?
【數(shù)據(jù)庫讀寫分離,主從 讀寫分離】有兩種方案 。先來了解什么情況下會(huì)產(chǎn)生緩存和數(shù)據(jù)庫數(shù)據(jù)不一致 。查詢數(shù)據(jù)時(shí)優(yōu)先從緩存中取,如果緩存沒有就查詢數(shù)據(jù)庫并且寫入緩存 。如果數(shù)據(jù)庫數(shù)據(jù)改變了則清除緩存 。在正常情況下是沒有問題的 。但是在服務(wù)的并發(fā)非常高的情況下,刪除了緩存此時(shí)數(shù)據(jù)庫還沒來得及更新完數(shù)據(jù)就又有查詢請(qǐng)求來了,這時(shí)候讀到的還是舊數(shù)據(jù)并且還會(huì)將舊數(shù)據(jù)寫入緩存 。
此時(shí)就造成了緩存和數(shù)據(jù)庫不一致 。第一種解決方案:延時(shí)刪除 。在改變數(shù)據(jù)庫數(shù)據(jù)時(shí)清除緩存的操作延時(shí)一段時(shí)間,這段時(shí)間可以非常短,只需要保證數(shù)據(jù)庫寫操作完成就可以了 。但在實(shí)際環(huán)境中我們并不知道數(shù)據(jù)庫什么時(shí)候才把數(shù)據(jù)寫完成,因此這段時(shí)間不好控制,短了的話起不到作用,長了的話影響體驗(yàn) 。不過在一般情況下這種方式已經(jīng)可以解決問題了 。
MYSQL中讀寫分離有什么樣的好處呢,為什么一些人都選擇讀寫分離?
現(xiàn)在絕大部分軟件項(xiàng)目,都會(huì)使用到關(guān)系型數(shù)據(jù)庫,比如MySQL、Oracle、DB2等等,目前這些數(shù)據(jù)庫的單機(jī)性能已經(jīng)是不斷優(yōu)化和提高了,但是隨著數(shù)據(jù)增長的速度和并發(fā)訪問量的增加,在某些公司、某些場(chǎng)景下,單機(jī)數(shù)據(jù)庫已經(jīng)很難滿足業(yè)務(wù)的需要了,所以必須考慮數(shù)據(jù)庫集群的方式來提高系統(tǒng)的可用性;最常見的兩種方法:分庫分表:把數(shù)據(jù)分散到不同的數(shù)據(jù)庫上,每臺(tái)數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)是不相同的(這里先不考慮每個(gè)庫做備份或讀寫分離);分庫分表既可以分散數(shù)據(jù)庫訪問的壓力,也可以分散數(shù)據(jù)存儲(chǔ)的壓力;但是使用分庫分表方案的時(shí)候,會(huì)帶來擴(kuò)容、事務(wù)、關(guān)聯(lián)查詢等問題和難點(diǎn),具體這里就不展開講了 。
讀寫分離:將數(shù)據(jù)庫讀操作和寫操作分散到不同的節(jié)點(diǎn)上,通常是一臺(tái)數(shù)據(jù)庫做寫操作,1到N臺(tái)做讀操作;讀寫分離的架構(gòu),每一臺(tái)數(shù)據(jù)中的數(shù)據(jù)是相同的(這里先忽略延遲的問題),所以只分散了數(shù)據(jù)庫訪問的壓力,并沒有分散數(shù)據(jù)存儲(chǔ)的壓力;我們這里主要講一講讀寫分離 。讀寫分離基本架構(gòu)MySQL讀寫分離的基本架構(gòu),可以參考下圖:如上圖,讀寫分離實(shí)現(xiàn)的基本步驟是:數(shù)據(jù)庫服務(wù)器搭建多臺(tái),一主N從(N大于等于1);主數(shù)據(jù)庫只負(fù)責(zé)寫操作,從數(shù)據(jù)庫只負(fù)責(zé)讀操作;主數(shù)據(jù)庫復(fù)制數(shù)據(jù)到從數(shù)據(jù)庫上;客戶端寫操作路由到主數(shù)據(jù)庫上,讀操作路由到從數(shù)據(jù)庫上 。
讀寫分離還有另外一種架構(gòu),就是在MySQL數(shù)據(jù)庫和客戶端之間,增加一層中間代理層,客戶端只連接代理,由代理根據(jù)請(qǐng)求類型,把請(qǐng)求分發(fā)到不同的數(shù)據(jù)庫上:第一種架構(gòu),整體架構(gòu)比較簡單直接,性能會(huì)稍微高一些,但是如果才用直連的方式,客戶端可能會(huì)稍微麻煩一些(通常需要引入一些組件,負(fù)責(zé)管理數(shù)據(jù)庫);第二種架構(gòu),對(duì)客戶端比較友好,因?yàn)榭蛻舳酥恍枰痛斫换?,并不用關(guān)注數(shù)據(jù)庫的具體信息;但是因?yàn)槎嗔艘粚哟?,多多少少?huì)對(duì)性能有一定的影響 。
讀寫分離帶來的好處讀寫分離結(jié)構(gòu)中,會(huì)有兩臺(tái)甚至更多臺(tái)數(shù)據(jù)庫,這種冗余的設(shè)計(jì),可以提高數(shù)據(jù)的安全性和系統(tǒng)的可用性;就算是在分庫分表的架構(gòu)中,每一臺(tái)子庫,也可以一主多備的部署方式;讀寫分離更多的時(shí)候使用在讀操作遠(yuǎn)遠(yuǎn)大于寫操作的場(chǎng)景下,這樣可以保證寫操作的數(shù)據(jù)庫承受更小的壓力,也可以緩解X鎖和S鎖爭用;服務(wù)器數(shù)量的增加,意味著可以有效地利用多臺(tái)服務(wù)器的資源;讀操作被分?jǐn)?,提高了系統(tǒng)的性能;如果寫操作比讀操作多,或者相近,可以采用雙主相互復(fù)制的架構(gòu) 。

推薦閱讀