MySQL分庫分表要點

分庫分表思維導圖

一、分庫分表的原因

  • MySQL單機能力有限
  • 百萬級表可以通過主從、讀寫分離、優(yōu)化索引等方式解決性能問題
  • 千萬級表時,性能開始下降,成為系統(tǒng)瓶頸
  • 需要做數(shù)據(jù)切分(Sharding),使用分布式的思路解決性能問題

二、切分方式

1、垂直切分
(1) 垂直分庫

??根據(jù)業(yè)務內(nèi)容將不同的業(yè)務數(shù)據(jù)分庫保存,彼此之間通過API接口獲取數(shù)據(jù)。

(2) 垂直分表

??即寬表拆分,減少每條數(shù)據(jù)的容量

優(yōu)點
  • 業(yè)務解耦
缺點
  • 增加開發(fā)復雜度,必須使用接口聚合數(shù)據(jù)
  • 要解決分布式事務問題
  • 單表數(shù)據(jù)量大的問題仍未解決。必須結合水平拆分
2、水平切分
(1) 單庫分表

??將一張大表,切分成多張表結構相同、只保存一部分數(shù)據(jù)的子表,所有子表存于同一個庫內(nèi)。

??問題點在于所有的子表仍然會競爭同一臺服務器的資源(CPU、內(nèi)存、IO)

(2) 分庫分表

??拆分出的子表散列到不同的數(shù)據(jù)庫中

優(yōu)點
  • 業(yè)務系統(tǒng)改造工作量不大
缺點
  • 要解決跨分片的事務一致性
  • 跨庫做關聯(lián)查詢(join)時性能差
  • 維護工作量大

三、主要技術點

1、挑選適合的主流分庫分表中間件
  • MyCAT
  • atlas
  • sharding-jdbc

……

2、水平拆分時數(shù)據(jù)如何散列
(1)根據(jù)主鍵(比如ID)或者增改時間的區(qū)間散列到相應的表

優(yōu)點:

  • 擴容方便,不用做數(shù)據(jù)遷移
  • 數(shù)據(jù)定位速度快
  • 單表數(shù)據(jù)量可控

缺點:

  • 由于冷熱數(shù)據(jù)的問題,造成負載不均衡
(2)hash函數(shù)散列。比如hash值取模

優(yōu)點:

  • 數(shù)據(jù)分布均衡,系統(tǒng)負載均衡

缺點:

  • 系統(tǒng)擴容時需要大量數(shù)據(jù)遷移,維護工作量大
3、解決事務一致性問題
  • 有強一致需求時:兩段提交(XA協(xié)議)等。開發(fā)難度大,系統(tǒng)性能差。
  • 盡可能爭取只需要保證最終一致性:做事務補償即可
4、全局唯一主鍵問題

??twitter的snowflake算法(雪花算法)及其各種衍生算法

5、分頁、排序

??需要先做各個分片數(shù)據(jù)的聚合,然后再做分頁、排序,開發(fā)工作量大

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Sharding的基本思想其實就是采用分治的思想,要把一個數(shù)據(jù)庫切分成多個部分放到不同的數(shù)據(jù)庫(server)上,...
    jiangmo閱讀 9,657評論 0 7
  • 分庫分表的基本思想 Sharding的基本思想就要把一個數(shù)據(jù)庫切分成多個部分放到不同的數(shù)據(jù)庫(server)上,從...
    jackcooper閱讀 40,274評論 7 168
  • @TOC 1.概述 1.1.分庫分表是什么 小明是一家初創(chuàng)電商平臺的開發(fā)人員,他負責賣家模塊的功能開發(fā),其中涉及了...
    小小一技術驛站閱讀 553評論 0 0
  • http://www.itdecent.cn/p/32b3e91aa22c?from=timeline 分庫分表的...
    許你一枝花閱讀 1,358評論 0 2
  • 很小的時候,就經(jīng)常會陷入一種對死亡的幻想之中。 經(jīng)常在幻想自己死后是不是會存在一個類似靈魂的東西,腦電波或者什么其...
    雷雷莫閱讀 301評論 1 1

友情鏈接更多精彩內(nèi)容