成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL讀多寫少設計方案 - 分庫分表還能這么做?

數據庫 MySQL
通過主從復制的技術把數據復制多份,讀操作只讀取從數據庫中的數據,這樣就增強了抵抗大量并發讀請求的能力,提升了數據庫的查詢性能。

[[414668]]

本文轉載自微信公眾號「JerryCodes」,作者KyleJerry。轉載本文請聯系JerryCodes公眾號。

通過主從復制的技術把數據復制多份,讀操作只讀取從數據庫中的數據,這樣就增強了抵抗大量并發讀請求的能力,提升了數據庫的查詢性能。這時,你的系統架構如下:

  • 系統架構圖
  • 案例背景

如何確定分庫還是分表?

何時分表

何時分庫

垂直拆分

Range(范圍分片)

  • 如何解決數據查詢問題?
  • 總結

案例背景

假設在這樣的背景下,面試官出了一道考題:

公司現有業務不斷發展,流量劇增,交易數量突破了千萬訂單,但是訂單數據還是單表存儲,主從分離后,雖然減少了緩解讀請求的壓力,但隨著寫入壓力增加,數據庫的查詢和寫入性能都在下降,這時你要怎么設計架構?

這個問題可以歸納為:數據庫寫入請求量過大,導致系統出現性能與可用性問題。

要想解決該問題,你可以對存儲數據做分片,常見的方式就是對數據庫做“分庫分表”,在實現上有三種策略:垂直拆分、水平拆分、垂直水平拆分。

這么回答真的可以嗎?

雖然分庫分表技術方案很常見,但是在面試中回答好并不簡單。因為面試官不會單純浮于表面問你“分庫分表的思路”,而是會站在業務場景中,當數據出現寫多讀少時,考察你做分庫分表的整體設計方案和技術實現的落地思路。一般會涉及這樣幾個問題:

什么場景該分庫?什么場景該分表?

復雜的業務如何選擇分片策略?

如何解決分片后的數據查詢問題?

如何確定分庫還是分表?

針對“如何確定分庫還是分表?”的問題,你要結合具體的場景。

何時分表

當數據量過大造成事務執行緩慢時,就要考慮分表,因為減少每次查詢數據總量是解決數據查詢緩慢的主要原因。你可能會問:“查詢可以通過主從分離或緩存來解決,為什么還要分表?”但這里的查詢是指事務中的查詢和更新操作。

何時分庫

為了應對高并發,一個數據庫實例撐不住,即單庫的性能無法滿足高并發的要求,就把并發請求分散到多個實例中去(這種應對高并發的思路我之前也說過)。

總的來說,分庫分表使用的場景不一樣:分表是因為數據量比較大,導致事務執行緩慢;分庫是因為單庫的性能無法滿足要求。

如何選擇分片策略?在明確分庫分表的場景后,面試官一般會追問“怎么進行分片?”換句話說就是按照什么分片策略對數據庫進行分片?

垂直拆分

垂直拆分是根據數據的業務相關性進行拆分。比如一個數據庫里面既存在商品數據,又存在訂單數據,那么垂直拆分可以把商品數據放到商品庫,把訂單數據放到訂單庫。一般情況,垂直拆庫常伴隨著系統架構上的調整。

垂直拆分

比如在對做系統“微服務”改造時,將原本一個單體系統拆分成多個子系統,每個系統提供單獨的服務,那么隨著應用層面的拆分帶來的也有數據層面的拆分,將一個主庫的數據表,拆分到多個獨立的子庫中去。

對數據庫進行垂直拆分最常規,優缺點也很明顯。

垂直拆分可以把不同的業務數據進行隔離,讓系統和數據更為“純粹”,更有助于架構上的擴展。但它依然不能解決某一個業務的數據大量膨脹的問題,一旦系統中的某一個業務庫的數據量劇增,比如商品系統接入了一個大客戶的供應鏈,對于商品數據的存儲需求量暴增,在這個時候,就要把數據拆分到多個數據庫和數據表中,也就是對數據做水平拆分。

水平拆分

垂直拆分隨架構改造而拆分,關注點在于業務領域,而水平拆分指的是把單一庫表數據按照規則拆分到多個數據庫和多個數據表中,比如把單表 1 億的數據按 Hash 取模拆分到 10 個相同結構的表中,每個表 1 千萬的數據。并且拆分出來的表,可以分別存放到不同的物理數據庫中,關注點在于數據擴展。

Range(范圍分片)

是按照某一個字段的區間來拆分,最好理解的就是按照時間字段分片,比如可以把一個月的數據放入一張表中,這樣在查詢時就可以根據時間先定位數據存儲在哪個表里面,再按照查詢條件來查詢。

但是按時間字段進行范圍分片的場景并不多,因為會導致數據分布不均,畢竟不是每個月的銷量都是平均的。所以常見的 Range 分片是按照字段類型,比如按照商品的所屬品類進行分片。這樣與 Hash 分片不同的是,Range 分片就可以加入對于業務的預估。

Range 分片

但是同樣的,由于不同“商品品類”的業務熱點不同,對于商品數據存儲也會存在熱點數據問題,這個時候處理的手段有兩個。

1、垂直擴展

由于 Range 分片是按照業務特性進行的分片策略,所以可以對熱點數據做垂直擴展,即提升單機處理能力。在業務發展突飛猛進的初期,建議使用“增強單機硬件性能”的方式提升系統處理能力,因為此階段,公司的戰略往往是發展業務搶時間,“增強單機硬件性能”是最快的方法。

2、分片元數據

單機性能總是有極限的,互聯網分布式架構設計高并發終極解決方案還是水平擴展,所以結合業務的特性,就需要在 Range 的基礎上引入“分片元數據”的概念:分片的規則記錄在一張表里面,每次執行查詢的時候,先去表里查一下要找的數據在哪個分片中。

這種方式的優點是靈活性高,并且分片規則可以隨著業務發展隨意改動。比如當某個分片已經是熱點了,那就可以把這個分片再拆成幾個分片,或者把這個分片的數據移到其他分片中去,然后修改一下分片元數據表,就可以在線完成數據的再分片了。

分片元數據

但你要注意,分片元數據本身需要做高可用。方案缺點是實現起來復雜,需要二次查詢,需要保證分片元數據服務的高可用。不過分片元數據表可以通過緩存進行提速。

垂直水平拆分,是綜合垂直和水平拆分方式的一種混合方式,垂直拆分把不同類型的數據存儲到不同庫中,再結合水平拆分,使單表數據量保持在合理范圍內,提升性能。

垂直水平拆分

如何解決數據查詢問題?

分庫分表引入的另外一個問題就是數據查詢的問題(比較常見),比如面試官會問類似的問題:

在未分庫分表之前,我們查詢數據總數時,可以直接通過 SQL 的 count() 命令,現在數據分片到多個庫表中,如何解決呢?

解題思路很多,你可以考慮其他的存儲方案,比如聚合查詢使用頻繁時,可以將聚合查詢的數據同步到 ES 中,或者將計數的數據單獨存儲在一張表里。如果是每日定時生成的統計類報表數據,也可以將數據同步到 HDFS 中,然后用一些大數據技術來生成報表。

總結

總的來說,在面對數據庫容量瓶頸和寫請求并發量大時,你可以選擇垂直分片和水平分片:

垂直分片一般隨著業務架構拆分來進行;

水平分片通常按照 Hash(哈希分片)取模和 Range(范圍分片)進行,并且,通常的形態是垂直拆分伴隨著水平拆分,即先按照業務垂直拆分后,再根據數據量的多少決定水平分片。

Hash 分片在互聯網中應用最為廣泛,簡單易實現,可以保證數據非常均勻地分布到多個分片,但其過濾掉了業務屬性,不能根據業務特性進行調整。而 Range 分片卻能預估業務,更高效地掃描數據記錄(Hash 分片由于數據被打散,掃描操作的 I/O 開銷更大)。

除了 Hash 分片和 Range 分片,更為靈活的方式是基于分片元數據。

不過你要注意,這幾種方式也會引入諸如聚合查詢的問題,要想解決聚合查詢,你可以讓聚合查詢記錄存儲在其他存儲設備中(比如 ES、HDFS)。

 

責任編輯:武曉燕 來源: JerryCodes
相關推薦

2021-04-01 05:40:53

分庫分表數據庫MySQL

2021-04-21 13:48:22

MySQL優化Redis

2023-06-27 11:57:24

用戶分析挖掘法ABtest

2023-07-27 13:44:19

業務用戶畫像

2020-03-05 13:55:50

MySQL分庫分表數據庫

2014-07-10 09:15:38

負載均衡安全網關

2015-08-05 10:50:01

Facebook緩存網頁

2019-10-08 12:32:07

運維架構技術

2013-11-27 12:40:21

鮑爾默微軟

2022-05-25 08:06:37

MySQL分庫分表

2024-10-17 16:55:08

2019-12-04 14:59:01

分布式緩存高可用

2025-07-03 08:21:16

2020-11-18 09:39:02

MySQL數據庫SQL

2024-02-02 16:25:01

模型訓練

2024-02-21 12:17:00

2023-08-26 20:08:15

分庫分表Spring

2024-02-21 23:03:56

代碼系統

2013-03-29 09:54:05

創業創業者

2020-07-30 17:59:34

分庫分表SQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站在线播放 | 亚洲免费视频在线观看 | 亚洲天堂中文字幕 | 欧美一区二区三区 | 在线中文字幕亚洲 | 国产在线高清 | 国产精品成人一区二区三区吃奶 | 亚洲视频在线免费观看 | 国产精品视频偷伦精品视频 | 亚洲在线高清 | 中文字幕免费中文 | 日日夜精品视频 | 国产91丝袜在线播放 | 亚洲一区二区久久 | 亚洲精品无 | 久久久69 | 视频一区二区三区中文字幕 | 国产高清视频 | 日韩精品一区二区三区中文字幕 | 久久性色 | 在线国产视频 | 国产激情网站 | 免费高潮视频95在线观看网站 | 成人欧美在线 | 蜜桃臀av一区二区三区 | 国产激情毛片 | 国产一区免费视频 | 最新一级毛片 | 91久久国产综合久久 | 欧美日韩国产一区 | 天堂一区| 亚洲三区在线观看 | www.国产 | 亚洲永久 | 韩三级在线观看 | 欧美精品中文字幕久久二区 | 亚洲视频在线看 | 午夜三级在线观看 | 精品美女 | 久久久成人精品 | 久久91精品国产一区二区三区 |