一,為什麼要冗餘資料
網際網路資料量很大的業務場景,往往資料庫需要進行水平切分來降低單庫資料量。
水平切分會有乙個patition key,通過patition key的查詢能夠直接定位到庫,但是非patition key上的查詢可能就需要掃瞄多個庫了。
此時常見的架構設計方案,是使用資料冗餘這種反正規化設計來滿足分庫後不同維度的查詢需求。
例如:訂單業務,對使用者和商家都有訂單查詢需求:
order(oid, info_detail);
t(buyer_id, seller_id, oid);
如果用buyer_id來分庫,seller_id的查詢就需要掃瞄多庫。
如果用seller_id來分庫,buyer_id的查詢就需要掃瞄多庫。
此時可以使用資料冗餘來分別滿足buyer_id和seller_id上的查詢需求:
t1(buyer_id, seller_id, oid)
t2(seller_id, buyer_id, oid)
同乙個資料,冗餘兩份,乙份以buyer_id來分庫,滿足買家的查詢需求;乙份以seller_id來分庫,滿足賣家的查詢需求。
如何實施資料的冗餘,是今天將要討論的內容。
二,服務同步雙寫
顧名思義,由服務層同步寫冗餘資料,如上圖1-4流程:
業務方呼叫服務,新增資料
服務先插入t1資料
服務再插入t2資料
服務返回業務方新增資料成功
優點:不複雜,服務層由單次寫,變兩次寫
資料一致性相對較高(因為雙寫成功才返回)
缺點:請求的處理時間增加(要插入兩次,時間加倍)
資料仍可能不一致,例如第二步寫入t1完成後服務重啟,則資料不會寫入t2
如果系統對處理時間比較敏感,引出常用的第二種方案。
三,服務非同步雙寫
資料的雙寫並不再由服務來完成,服務層非同步發出乙個訊息,通過訊息匯流排傳送給乙個專門的資料復**務來寫入冗餘資料,如上圖1-6流程:
業務方呼叫服務,新增資料
服務先插入t1資料
服務向訊息匯流排傳送乙個非同步訊息(發出即可,不用等返回,通常很快就能完成)
服務返回業務方新增資料成功
訊息匯流排將訊息投遞給資料同步中心
資料同步中心插入t2資料
優點:請求處理時間短(只插入1次)
缺點:系統的複雜性增加了,多引入了乙個元件(訊息匯流排)和乙個服務(專用的資料復**務)
因為返回業務線資料插入成功時,資料還不一定插入到t2中,因此資料有乙個不一致時間視窗(這個視窗很短,最終是一致的)
在訊息匯流排丟失訊息時,冗餘表資料會不一致
不管是服務同步雙寫,還是服務非同步雙寫,服務都需要關注「冗餘資料」帶來的複雜性。如果想解除「資料冗餘」對系統的耦合,引出常用的第三種方案。
四,線下非同步雙寫
為了遮蔽「冗餘資料」對服務帶來的複雜性,資料的雙寫不再由服務層來完成,而是由線下的乙個服務或者任務來完成,如上圖1-6流程:
業務方呼叫服務,新增資料
服務先插入t1資料
服務返回業務方新增資料成功
資料會被寫入到資料庫的log中
線下服務或者任務讀取資料庫的log
線下服務或者任務插入t2資料
優點:資料雙寫與業務完全解耦
請求處理時間短(只插入1次)
缺點:返回業務線資料插入成功時,資料還不一定插入到t2中,因此資料有乙個不一致時間視窗(這個視窗很短,最終是一致的)
資料的一致性依賴於線下服務或者任務的可靠性
五,總結
網際網路資料量大的業務場景,常常:
使用水平切分來降低單庫資料量
使用資料冗餘的反正規化設計來滿足不同維度的查詢需求
使用服務同步雙寫法能夠很容易的實現資料冗餘
為了降低時延,可以優化為服務非同步雙寫法
為了遮蔽「冗餘資料」對服務帶來的複雜性,可以優化為線下非同步雙寫法
mysql冗餘索引 MySQL 冗餘和重複索引
冗餘和重複索引冗餘和重複索引的概念 mysql允許在相同列上建立多個索引,無論是有.冗餘和重複索引 冗餘和重複索引的概念 mysql允許在相同列上建立多個索引,無論是有意的還是無意的。mysql需要單獨維護重複的索引,香港虛擬主機,並且優化器在優化查詢的時候也需要逐個地進行考慮,香港虛擬主機,這會影...
mysql 冗餘和重複索引
mysql允許在相同列上建立多個索引,無論是有意還是無意,mysql需要單獨維護重複的索引,並且優化器在優化查詢的時候也需要逐個地進行考慮,這會影響效能。create table test id intnot null primary key,a intnot null b intnot null,...
mySQL雙機冗餘 MySQL雙機熱備實現原理
雙機熱備是應用於伺服器的一種解決方案,其構造思想是主機和從機通過tcp ip網路連線,正常情況下主機處於工作狀態,從機處於監視狀態,一旦從機發現主機異常,從機將會在很短的時間之內代替主機,完全實現主機的功能。mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份的資料庫...