MySQL之分庫分表(MyCAT實現)

分庫分表介紹

隨着微服務這種架構的興起,咱們應用從一個完整的大的應用,切分爲不少能夠獨立提供服務的小應用。每一個應用都有獨立的數據庫。node

數據的切分分爲兩種:

垂直切分:按照業務模塊進行切分,將不一樣模塊的表切分到不一樣的數據庫中。mysql

 

 

 水平切分:將一張大表按照必定的切分規則,按照行切分到不一樣的表或者不一樣的庫中。redis

 

 MyCAT介紹

官方網站:http://www.mycat.org.cn/算法

什麼是MyCAT?

簡單的說,MyCAT就是:sql

  • 一個完全開源的,面向企業應用開發的「大數據庫集羣」
  • 支持事務、ACID、能夠替代Mysql的增強版數據庫
  • 一個能夠視爲「Mysql」集羣的企業級數據庫,用來替代昂貴的Oracle集羣
  • 一個融合內存緩存技術、Nosql技術、HDFS大數據的新型SQL Server
  • 結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品
  • 一個新穎的數據庫中間件產品

MyCAT的目標是:低成本的將現有的單機數據庫和應用平滑遷移到「雲」端,解決數據存儲和業務規模迅速增加狀況下的數據瓶頸問題。數據庫

MyCAT的關鍵特性

  1. 支持 SQL 92標準
  2. 支持Mysql集羣,能夠做爲Proxy使用
  3. 支持JDBC鏈接ORACLE、DB二、SQL Server,將其模擬爲MySQL  Server使用
  4. 支持galera for mysql集羣,percona-cluster或者mariadb cluster,提供高可用性數據分片集羣
  5. 自動故障切換,高可用性
  6. 支持讀寫分離,支持Mysql雙主多從,以及一主多從的模式
  7. 支持全局表,數據自動分片到多個節點,用於高效表關聯查詢
  8. 支持獨有的基於E-R 關係的分片策略,實現了高效的表關聯查詢
  9. 多平臺支持,部署和實施簡單

MyCAT架構

 

 

MyCAT核心概念

  1. Schema:由它指定邏輯數據庫
  2. Table:邏輯表
  3. DataNode:真正存儲節點
  4. DataHost:真正的數據庫主機

Mycat存在的問題

跨庫join問題後端

  • 經過業務分析,將不一樣庫的join查詢拆分紅多個select
  • 創建全局表(每一個庫都有一個相同的表)
  • 冗餘字段(不符合數據庫三範式)
  • E-R分片(將有關係的記錄都存儲到一個庫中)
  • 最多支持跨兩張表跨庫的join

分佈式事務(弱事務)緩存

  • 強一致性事務(同步)
  • 最終一致性事務(異步思想)

分佈式主鍵架構

  • redis incr命令
  • 數據庫(生成主鍵)
  • UUID
  • snowflake算法

1.1      分片策略

MyCAT支持水平分片與垂直分片:異步

  • 水平分片:一個表格的數據分割到多個節點上,按照行分隔。
  • 垂直分片:一個數據庫中多個表格A,B,C,A存儲到節點1上,B存儲到節點2上,C存儲到節點3上。

 

MyCAT經過定義表的分片規則來實現分片,每一個表格能夠捆綁一個分片規則,每一個分片規則指定一個分片字段並綁定一個函數,來實現動態分片算法。

  1. Schema:邏輯庫,與MySQL中的Database(數據庫)對應,一個邏輯庫中定義了所包括的Table。
  2. Table:表,即物理數據庫中存儲的某一張表,與傳統數據庫不一樣,這裏的表格須要聲明其所存儲的邏輯數據節點DataNode。在此能夠指定表的分片規則。
  3. DataNode:MyCAT的邏輯數據節點,是存放table的具體物理節點,也稱之爲分片節點,經過DataSource來關聯到後端某個具體數據庫上
  4. DataSource:定義某個物理庫的訪問地址,用於捆綁到Datanode上

Mycat讀寫分離

MyCat的讀寫分離是創建在MySQL主從複製基礎之上實現的。

數據庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來講,是必不可少的一個重要功能。對於MySQL來講,標準的讀寫分離是主從模式,一個寫節點Master後面跟着多個讀節點,讀節點的數量取決於系統的壓力,一般是1-3個讀節點的配置

 

 

Mycat讀寫分離和自動切換機制,須要mysql的主從複製機制配合。

相關文章
相關標籤/搜索