欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

MySQL冗余數(shù)據(jù)的三種方案

2018-03-19 18:43:09 1737瀏覽

一、為什么要冗余數(shù)據(jù)

互聯(lián)網(wǎng)數(shù)據(jù)量很大的業(yè)務(wù)場景,往往數(shù)據(jù)庫需要進行水平切分來降低單庫數(shù)據(jù)量。


水平切分會有一個patitionkey,通過patitionkey的查詢能夠直接定位到庫,但是非patitionkey上的查詢可能就需要掃描多個庫了。

此時常見的架構(gòu)設(shè)計方案,是使用數(shù)據(jù)冗余這種反范式設(shè)計來滿足分庫后不同維度的查詢需求。

例如:訂單業(yè)務(wù),對用戶和商家都有訂單查詢需求:

Order(oid,info_detail);

T(buyer_id,seller_id,oid);

如果用buyer_id來分庫,seller_id的查詢就需要掃描多庫。

如果用seller_id來分庫,buyer_id的查詢就需要掃描多庫。

此時可以使用數(shù)據(jù)冗余來分別滿足buyer_id和seller_id上的查詢需求:

T1(buyer_id,seller_id,oid)

T2(seller_id,buyer_id,oid)

同一個數(shù)據(jù),冗余兩份,一份以buyer_id來分庫,滿足買家的查詢需求;一份以seller_id來分庫,滿足賣家的查詢需求。

如何實施數(shù)據(jù)的冗余,是今天將要討論的內(nèi)容。

二、服務(wù)同步雙寫


顧名思義,由服務(wù)層同步寫冗余數(shù)據(jù),如上圖1-4流程:

業(yè)務(wù)方調(diào)用服務(wù),新增數(shù)據(jù)

服務(wù)先插入T1數(shù)據(jù)

服務(wù)再插入T2數(shù)據(jù)

服務(wù)返回業(yè)務(wù)方新增數(shù)據(jù)成功

優(yōu)點:

不復(fù)雜,服務(wù)層由單次寫,變兩次寫

數(shù)據(jù)一致性相對較高(因為雙寫成功才返回)

缺點:

請求的處理時間增加(要插入兩次,時間加倍)

數(shù)據(jù)仍可能不一致,例如第二步寫入T1完成后服務(wù)重啟,則數(shù)據(jù)不會寫入T2

如果系統(tǒng)對處理時間比較敏感,引出常用的第二種方案。

三、服務(wù)異步雙寫


數(shù)據(jù)的雙寫并不再由服務(wù)來完成,服務(wù)層異步發(fā)出一個消息,通過消息總線發(fā)送給一個專門的數(shù)據(jù)復(fù)制服務(wù)來寫入冗余數(shù)據(jù),如上圖1-6流程:

業(yè)務(wù)方調(diào)用服務(wù),新增數(shù)據(jù)

服務(wù)先插入T1數(shù)據(jù)

服務(wù)向消息總線發(fā)送一個異步消息(發(fā)出即可,不用等返回,通常很快就能完成)

服務(wù)返回業(yè)務(wù)方新增數(shù)據(jù)成功

消息總線將消息投遞給數(shù)據(jù)同步中心

數(shù)據(jù)同步中心插入T2數(shù)據(jù)

優(yōu)點:

請求處理時間短(只插入1次)

缺點:

系統(tǒng)的復(fù)雜性增加了,多引入了一個組件(消息總線)和一個服務(wù)(專用的數(shù)據(jù)復(fù)制服務(wù))

因為返回業(yè)務(wù)線數(shù)據(jù)插入成功時,數(shù)據(jù)還不一定插入到T2中,因此數(shù)據(jù)有一個不一致時間窗口(這個窗口很短,最終是一致的)

在消息總線丟失消息時,冗余表數(shù)據(jù)會不一致,不管是服務(wù)同步雙寫,還是服務(wù)異步雙寫,服務(wù)都需要關(guān)注“冗余數(shù)據(jù)”帶來的復(fù)雜性。如果想解除“數(shù)據(jù)冗余”對系統(tǒng)的耦合,引出常用的第三種方案。

四、線下異步雙寫


為了屏蔽“冗余數(shù)據(jù)”對服務(wù)帶來的復(fù)雜性,數(shù)據(jù)的雙寫不再由服務(wù)層來完成,而是由線下的一個服務(wù)或者任務(wù)來完成,如上圖1-6流程:

業(yè)務(wù)方調(diào)用服務(wù),新增數(shù)據(jù)

服務(wù)先插入T1數(shù)據(jù)

服務(wù)返回業(yè)務(wù)方新增數(shù)據(jù)成功

數(shù)據(jù)會被寫入到數(shù)據(jù)庫的log中

線下服務(wù)或者任務(wù)讀取數(shù)據(jù)庫的log

線下服務(wù)或者任務(wù)插入T2數(shù)據(jù)

優(yōu)點:

數(shù)據(jù)雙寫與業(yè)務(wù)完全解耦

請求處理時間短(只插入1次)

缺點:

返回業(yè)務(wù)線數(shù)據(jù)插入成功時,數(shù)據(jù)還不一定插入到T2中,因此數(shù)據(jù)有一個不一致時間窗口(這個窗口很短,最終是一致的)

數(shù)據(jù)的一致性依賴于線下服務(wù)或者任務(wù)的可靠性

五、總結(jié)

互聯(lián)網(wǎng)數(shù)據(jù)量大的業(yè)務(wù)場景,常常:

使用水平切分來降低單庫數(shù)據(jù)量

使用數(shù)據(jù)冗余的反范式設(shè)計來滿足不同維度的查詢需求

使用服務(wù)同步雙寫法能夠很容易的實現(xiàn)數(shù)據(jù)冗余

為了降低時延,可以優(yōu)化為服務(wù)異步雙寫法

為了屏蔽“冗余數(shù)據(jù)”對服務(wù)帶來的復(fù)雜性,可以優(yōu)化為線下異步雙寫法



最后想要了解更多關(guān)于PHP開發(fā)發(fā)展前景趨勢,請關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺,扣丁學(xué)堂PHP培訓(xùn)IT職業(yè)在線學(xué)習(xí)教育平臺為您提供權(quán)威的PHP視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的一套PHP視頻教程課程,讓你快速掌握PHP從入門到精通開發(fā)實戰(zhàn)技能。扣丁學(xué)堂PHP開發(fā)工程師技術(shù)交流群:374332265。


扣丁學(xué)堂微信公眾號



關(guān)注微信公眾號獲取更多學(xué)習(xí)資料



查看更多關(guān)于“php培訓(xùn)資訊的相關(guān)文章>>

標簽: PHP培訓(xùn) PHP視頻教程 PHP從入門到精通 PHP學(xué)習(xí)路線圖 PHP開發(fā)工程師 MySQL冗余數(shù)據(jù)

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部