MySQL之分库分表(MyCAT实现)
分庫分表介紹
隨著微服務(wù)這種架構(gòu)的興起,我們應(yīng)用從一個(gè)完整的大的應(yīng)用,切分為很多可以獨(dú)立提供服務(wù)的小應(yīng)用。每個(gè)應(yīng)用都有獨(dú)立的數(shù)據(jù)庫。
數(shù)據(jù)的切分分為兩種:
垂直切分:按照業(yè)務(wù)模塊進(jìn)行切分,將不同模塊的表切分到不同的數(shù)據(jù)庫中。
水平切分:將一張大表按照一定的切分規(guī)則,按照行切分到不同的表或者不同的庫中。
MyCAT介紹
官方網(wǎng)站:http://www.mycat.org.cn/
什么是MyCAT?
簡單的說,MyCAT就是:
一個(gè)徹底開源的,面向企業(yè)應(yīng)用開發(fā)的“大數(shù)據(jù)庫集群”
支持事務(wù)、ACID、可以替代Mysql的加強(qiáng)版數(shù)據(jù)庫
一個(gè)可以視為“Mysql”集群的企業(yè)級(jí)數(shù)據(jù)庫,用來替代昂貴的Oracle集群
一個(gè)融合內(nèi)存緩存技術(shù)、Nosql技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server
結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級(jí)數(shù)據(jù)庫產(chǎn)品
一個(gè)新穎的數(shù)據(jù)庫中間件產(chǎn)品
MyCAT的目標(biāo)是:低成本的將現(xiàn)有的單機(jī)數(shù)據(jù)庫和應(yīng)用平滑遷移到“云”端,解決數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)規(guī)模迅速增長情況下的數(shù)據(jù)瓶頸問題。
MyCAT的關(guān)鍵特性
支持 SQL 92標(biāo)準(zhǔn)
支持Mysql集群,可以作為Proxy使用
支持JDBC連接ORACLE、DB2、SQL Server,將其模擬為MySQL Server使用
支持galera for mysql集群,percona-cluster或者mariadbcluster,提供高可用性數(shù)據(jù)分片集群
自動(dòng)故障切換,高可用性
支持讀寫分離,支持Mysql雙主多從,以及一主多從的模式
支持全局表,數(shù)據(jù)自動(dòng)分片到多個(gè)節(jié)點(diǎn),用于高效表關(guān)聯(lián)查詢
支持獨(dú)有的基于E-R 關(guān)系的分片策略,實(shí)現(xiàn)了高效的表關(guān)聯(lián)查詢
多平臺(tái)支持,部署和實(shí)施簡單
MyCAT架構(gòu)
MyCAT核心概念
Schema:由它指定邏輯數(shù)據(jù)庫
Table:邏輯表
DataNode:真正存儲(chǔ)節(jié)點(diǎn)
DataHost:真正的數(shù)據(jù)庫主機(jī)
Mycat存在的問題
跨庫join問題
通過業(yè)務(wù)分析,將不同庫的join查詢拆分成多個(gè)select
建立全局表(每個(gè)庫都有一個(gè)相同的表)
冗余字段(不符合數(shù)據(jù)庫三范式)
E-R分片(將有關(guān)系的記錄都存儲(chǔ)到一個(gè)庫中)
最多支持跨兩張表跨庫的join
分布式事務(wù)(弱事務(wù))
強(qiáng)一致性事務(wù)(同步)
最終一致性事務(wù)(異步思想)
分布式主鍵
redis incr命令
數(shù)據(jù)庫(生成主鍵)
UUID
snowflake算法
1.1 分片策略
MyCAT支持水平分片與垂直分片:
水平分片:一個(gè)表格的數(shù)據(jù)分割到多個(gè)節(jié)點(diǎn)上,按照行分隔。
垂直分片:一個(gè)數(shù)據(jù)庫中多個(gè)表格A,B,C,A存儲(chǔ)到節(jié)點(diǎn)1上,B存儲(chǔ)到節(jié)點(diǎn)2上,C存儲(chǔ)到節(jié)點(diǎn)3上。
MyCAT通過定義表的分片規(guī)則來實(shí)現(xiàn)分片,每個(gè)表格可以捆綁一個(gè)分片規(guī)則,每個(gè)分片規(guī)則指定一個(gè)分片字段并綁定一個(gè)函數(shù),來實(shí)現(xiàn)動(dòng)態(tài)分片算法。
Schema:邏輯庫,與MySQL中的Database(數(shù)據(jù)庫)對(duì)應(yīng),一個(gè)邏輯庫中定義了所包括的Table。
Table:表,即物理數(shù)據(jù)庫中存儲(chǔ)的某一張表,與傳統(tǒng)數(shù)據(jù)庫不同,這里的表格需要聲明其所存儲(chǔ)的邏輯數(shù)據(jù)節(jié)點(diǎn)DataNode。在此可以指定表的分片規(guī)則。
DataNode:MyCAT的邏輯數(shù)據(jù)節(jié)點(diǎn),是存放table的具體物理節(jié)點(diǎn),也稱之為分片節(jié)點(diǎn),通過DataSource來關(guān)聯(lián)到后端某個(gè)具體數(shù)據(jù)庫上
DataSource:定義某個(gè)物理庫的訪問地址,用于捆綁到Datanode上
Mycat讀寫分離
MyCat的讀寫分離是建立在MySQL主從復(fù)制基礎(chǔ)之上實(shí)現(xiàn)的。
數(shù)據(jù)庫讀寫分離對(duì)于大型系統(tǒng)或者訪問量很高的互聯(lián)網(wǎng)應(yīng)用來說,是必不可少的一個(gè)重要功能。對(duì)于MySQL來說,標(biāo)準(zhǔn)的讀寫分離是主從模式,一個(gè)寫節(jié)點(diǎn)Master后面跟著多個(gè)讀節(jié)點(diǎn),讀節(jié)點(diǎn)的數(shù)量取決于系統(tǒng)的壓力,通常是1-3個(gè)讀節(jié)點(diǎn)的配置
Mycat讀寫分離和自動(dòng)切換機(jī)制,需要mysql的主從復(fù)制機(jī)制配合。
總結(jié)
以上是生活随笔為你收集整理的MySQL之分库分表(MyCAT实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东事业编统考报名入口(电大统考报名入口
- 下一篇: 如何提高品牌影响力的帖子(如何提高品牌影