一,為什麼要冗餘資料
網際網路資料量很大的業務場景,往往資料庫需要進行水平切分來降低單庫資料量。
水平切分會有乙個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流程:
優點:
缺點:
如果系統對處理時間比較敏感,引出常用的第二種方案。
三,服務非同步雙寫
資料的雙寫並不再由服務來完成,服務層非同步發出乙個訊息,通過訊息匯流排傳送給乙個專門的資料復**務來寫入冗餘資料,如上圖1-6流程: 優點
: 缺點:
不管是服務同步雙寫,還是服務非同步雙寫,服務都需要關注「冗餘資料」帶來的複雜性。
如果想解除「資料冗餘」對系統的耦合,引出常用的第三種方案。
四,線下非同步雙寫
為了遮蔽「冗餘資料」對服務帶來的複雜性,資料的雙寫不再由服務層來完成,而是由線下的乙個服務或者任務來完成,如上圖1-6流程: 優點
: 缺點
: 五,總結
網際網路資料量大的業務場景,常常:
MySQL冗餘資料的三種方案
一,為什麼要冗餘資料 網際網路資料量很大的業務場景,往往資料庫需要進行水平切分來降低單庫資料量。水平切分會有乙個patition key,通過patition key的查詢能夠直接定位到庫,但是非patition key上的查詢可能就需要掃瞄多個庫了。此時常見的架構設計方案,是使用資料冗餘這種反正規...
mysql資料冗餘 MySQL冗餘資料的三種方案
一,為什麼要冗餘資料 網際網路資料量很大的業務場景,往往資料庫需要進行水平切分來降低單庫資料量。水平切分會有乙個patition key,通過patition key的查詢能夠直接定位到庫,但是非patition key上的查詢可能就需要掃瞄多個庫了。此時常見的架構設計方案,是使用資料冗餘這種反正規...
mysql三種引擎 MySQL常見的三種儲存引擎
簡單來說,儲存引擎就是指表的型別以及表在計算機上的儲存方式。儲存引擎的概念是mysql的特點,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不同的儲存引擎決定了mysql資料庫中的表可以用不同的方式來儲存。我們可以根據資料的特點來選擇不同的儲存引擎。在mysql...