主頁 > 知識庫 > MySQL 分表分庫怎么進行數(shù)據(jù)切分

MySQL 分表分庫怎么進行數(shù)據(jù)切分

熱門標簽:催天下外呼系統(tǒng) 北京金倫外呼系統(tǒng) 400電話變更申請 武漢電銷機器人電話 html地圖標注并導航 南太平洋地圖標注 大豐地圖標注app 400電話辦理服務價格最實惠 呂梁外呼系統(tǒng)

關(guān)系型數(shù)據(jù)庫本身比較容易成為系統(tǒng)瓶頸,單機存儲容量、連接數(shù)、處理能力都有限。當單表的數(shù)據(jù)量達到1000W或100G以后,由于查詢維度較多,即使添加從庫、優(yōu)化索引,做很多操作時性能仍下降嚴重。此時就要考慮對其進行切分了,切分的目的就在于減少數(shù)據(jù)庫的負擔,縮短查詢時間。

數(shù)據(jù)庫分布式核心內(nèi)容無非就是數(shù)據(jù)切分(Sharding)以及切分后對數(shù)據(jù)的定位、整合。數(shù)據(jù)切分就是將數(shù)據(jù)分散存儲到多個數(shù)據(jù)庫中,使得單一數(shù)據(jù)庫中的數(shù)據(jù)量變小,通過擴充主機的數(shù)量緩解單一數(shù)據(jù)庫的性能問題,從而達到提升數(shù)據(jù)庫操作性能的目的。

數(shù)據(jù)切分根據(jù)其切分類型,可以分為兩種方式:垂直(縱向)切分和水平(橫向)切分。

1.垂直(縱向)切分

垂直切分常見有垂直分庫和垂直分表兩種。

1.1 垂直分庫 

就是根據(jù)業(yè)務耦合性,將關(guān)聯(lián)度低的不同表存儲在不同的數(shù)據(jù)庫。做法與大系統(tǒng)拆分為多個小系統(tǒng)類似,按業(yè)務

分類進行獨立劃分。與"微服務治理"的做法相似,每個微服務使用單獨的一個數(shù)據(jù)庫。如圖:

將不同模塊的數(shù)據(jù)表分庫存儲。模塊間不相互關(guān)聯(lián)查詢

如果有,就需要通過數(shù)據(jù)冗余或者應層二次加工來解決。這種業(yè)務方法和數(shù)據(jù)結(jié)構(gòu)最清晰。但若不能杜絕跨庫關(guān)聯(lián)查詢,宣告此路不同

1.2 垂直分表 

是基于數(shù)據(jù)庫中的"列"進行,某個表字段較多,可以新建一張擴展表,將不經(jīng)常用或字段長度較大的字段拆分出去到擴展表中。在字段很多的情況下(例如一個大表有100多個字段),通過"大表拆小表",更便于開發(fā)與維護,也能避免跨頁問題,MySQL底層是通過數(shù)據(jù)頁存儲的,一條記錄占用空間過大會導致跨頁,造成額外的性能開銷。另外數(shù)據(jù)庫以行為單位將數(shù)據(jù)加載到內(nèi)存中,這樣表中字段長度較短且訪問頻率較高,內(nèi)存能加載更多的數(shù)據(jù),命中率更高,減少了磁盤IO,從而提升了數(shù)據(jù)庫性能。

垂直切分的優(yōu)點:

  • 解決業(yè)務系統(tǒng)層面的耦合,業(yè)務清晰
  • 與微服務的治理類似,也能對不同業(yè)務的數(shù)據(jù)進行分級管理、維護、監(jiān)控、擴展等
  • 高并發(fā)場景下,垂直切分一定程度的提升IO、數(shù)據(jù)庫連接數(shù)、單機硬件資源的瓶頸

缺點:

  • 部分表無法join,只能通過接口聚合方式解決,提升了開發(fā)的復雜度
  • 分布式事務處理復雜
  • 依然存在單表數(shù)據(jù)量過大的問題(需要水平切分)

2. 水平(橫向)切分

當一個應用難以再細粒度的垂直切分,或切分后數(shù)據(jù)量行數(shù)巨大,存在單庫讀寫、存儲性能瓶頸,這時候就需要進行水平切分了。

水平切分分為庫內(nèi)分表和分庫分表,是根據(jù)表內(nèi)數(shù)據(jù)內(nèi)在的邏輯關(guān)系,將同一個表按不同的條件分散到多個數(shù)據(jù)庫或多個表中,每個表中只包含一部分數(shù)據(jù),從而使得單個表的數(shù)據(jù)量變小,達到分布式的效果。如圖所示: 

相對縱向切分這一將表分類的做法,此法是按表內(nèi)每個字段的某個規(guī)則來將數(shù)據(jù)分散存儲于不同的數(shù)據(jù)庫(或不同的表),也就是按照數(shù)行來進行切分數(shù)據(jù)。

庫內(nèi)分表只解決了單一表數(shù)據(jù)量過大的問題,但沒有將表分布到不同機器的庫上,因此對于減輕MySQL數(shù)據(jù)庫的壓力來說,幫助不是很大,大家還是競爭同一個物理機的CPU、內(nèi)存、網(wǎng)絡IO,最好通過分庫分表來解決。

水平切分的優(yōu)點:

  • 不存在單庫數(shù)據(jù)量過大、高并發(fā)的性能瓶頸,提升系統(tǒng)穩(wěn)定性和負載能力
  • 應用端改造較小,不需要拆分業(yè)務模塊

缺點:

  • 跨分片的事務一致性難以保證
  • 跨庫的join關(guān)聯(lián)查詢性能較差
  • 數(shù)據(jù)多次擴展難度和維護量極大

水平切分后同一張表會出現(xiàn)在多個數(shù)據(jù)庫/表中,每個庫/表的內(nèi)容不同。幾種典型的數(shù)據(jù)分片規(guī)則為:

2.1 根據(jù)數(shù)值范圍

按照時間區(qū)間或ID區(qū)間來切分。例如:按日期將不同月甚至是日的數(shù)據(jù)分散到不同的庫中;將userId為1~9999的記錄分到第一個庫,10000~20000的分到第二個庫,以此類推。某種意義上,某些系統(tǒng)中使用的"冷熱數(shù)據(jù)分離",將一些使用較少的歷史數(shù)據(jù)遷移到其他庫中,業(yè)務功能上只提供熱點數(shù)據(jù)的查詢,也是類似的實踐。

這樣的優(yōu)點在于:

  • 單表大小可控
  • 天然便于水平擴展,后期如果想對整個分片集群擴容時,只需要添加節(jié)點即可,無需對其他分片的數(shù)據(jù)進行遷移
  • 使用分片字段進行范圍查找時,連續(xù)分片可快速定位分片進行快速查詢,有效避免跨分片查詢的問題。

缺點:

  • 熱點數(shù)據(jù)成為性能瓶頸。連續(xù)分片可能存在數(shù)據(jù)熱點,例如按時間字段分片,有些分片存儲最近時間段內(nèi)的數(shù)據(jù),可能會被頻繁的讀寫,而有些分片存儲的歷史數(shù)據(jù),則很少被查詢

2.2 根據(jù)數(shù)值取模

一般采用hash取模mod的切分方式,例如:將 Customer 表根據(jù) cusno 字段切分到4個庫中,余數(shù)為0的放到第一個庫,余數(shù)為1的放到第二個庫,以此類推。這樣同一個用戶的數(shù)據(jù)會分散到同一個庫中,如果查詢條件帶有cusno字段,則可明確定位到相應庫去查詢。

優(yōu)點:

  • 數(shù)據(jù)分片相對比較均勻,不容易出現(xiàn)熱點和并發(fā)訪問的瓶頸

缺點:

  • 后期分片集群擴容時,需要遷移舊的數(shù)據(jù)(使用一致性hash算法能較好的避免這個問題)
  • 容易面臨跨分片查詢的復雜問題。比如上例中,如果頻繁用到的查詢條件中不帶cusno時,將會導致無法定位數(shù)據(jù)庫,從而需要同時向4個庫發(fā)起查詢,再在內(nèi)存中合并數(shù)據(jù),取最小集返回給應用,分庫反而成為拖累。

以上就是MySQL 分表分庫怎么進行數(shù)據(jù)切分的詳細內(nèi)容,更多關(guān)于MySQL 分表分庫進行數(shù)據(jù)切分的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 淺談訂單重構(gòu)之 MySQL 分庫分表實戰(zhàn)篇
  • MySQL分庫分表與分區(qū)的入門指南
  • mysql死鎖和分庫分表問題詳解
  • MySql分表、分庫、分片和分區(qū)知識深入詳解
  • MySql分表、分庫、分片和分區(qū)知識點介紹
  • MySQL分庫分表總結(jié)講解
  • mysql分表分庫的應用場景和設(shè)計方式
  • mysql數(shù)據(jù)庫分表分庫的策略
  • MyBatis實現(xiàn)Mysql數(shù)據(jù)庫分庫分表操作和總結(jié)(推薦)
  • MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結(jié)
  • Mysql數(shù)據(jù)庫分庫和分表方式(常用)
  • MYSQL性能優(yōu)化分享(分庫分表)
  • MySQL分庫分表詳情

標簽:無錫 迪慶 龍巖 西寧 徐州 南充 麗水 自貢

巨人網(wǎng)絡通訊聲明:本文標題《MySQL 分表分庫怎么進行數(shù)據(jù)切分》,本文關(guān)鍵詞  MySQL,分表,分庫,怎么,進行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL 分表分庫怎么進行數(shù)據(jù)切分》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL 分表分庫怎么進行數(shù)據(jù)切分的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章