1. 程式人生 > >MyCat教程五:實現分庫分表

MyCat教程五:實現分庫分表


 本文我們來介紹下MyCat的分庫分表操作


分庫分表


一、分片規則介紹


  在rule.xml中定義了各種myCat支援的分片規則。



  1. 取模mod-long

  2. 自然月分片 sharding-by-month

  3. 按日期(天)分片sharding-by-date

  4. 按單月小時拆分sharding-by-hour

  5. 範圍約定,提前規劃好分片欄位某個範圍屬於哪個分片,auto-sharding-long

  6. 範圍求模分片

  7. 取模範圍約束sharding-by-pattern

  8. 分片列舉sharding-by-intfile

  9. 固定分片hash演算法

  10. 擷取數字hash解析sharding-by-stringhash

  11. 一致性hash

  12. 日期範圍hash分片rangeDateHash

  13. 擷取數字做hash求模範圍約束sharding-by-prefixpattern

  14. 應用指定,在執行階段有應用自主決定路由到那個分片。sharding-by-substring

  15. 冷熱資料分片 sharding-by-date

  16. 有狀態分片演算法

  17. crc32slot分片演算法


注意:



  1. id中推薦配置主鍵列

  2. 所有的 tableRule 只能使用一次。如果需要為多個表配置相同的分片規則,那麼需要在此重新定義該規則。

  3. 在 crc32Slot 演算法中的分片數量一旦給定,MyCat 會將該分片數量和 slor 的取值範圍儲存到檔案中。在次修改分片數量時是不會生效的,需要將該檔案刪除。檔案位置位於 conf目錄中的 ruledata 目錄中。


二、分庫配置


2.1 建立3個數據庫


  在master中分別建立3個數據庫demo1,demo2,demo3,因為主從的關係會同步到從庫中。


create database demo1 default character set utf8;
create database demo2 default character set utf8;
create database demo3 default character set utf8;


2.2 schema.xml配置


  修改schema.xml檔案中的資訊,如下:


<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t_user" dataNode="dn1,dn2,dn3" rule="crc32slot" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="demo1" />
<dataNode name="dn2" dataHost="localhost1" database="demo2" />
<dataNode name="dn3" dataHost="localhost1" database="demo3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.88.180:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.88.181:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

注意:



  1. 因為有三個庫,所以添加了三個dataNode

  2. 使用的分配規則是crc32slot

  3. 主從和讀寫分離設定沒有動,所以writeHostreadHost的配置沒變


2.3 修改rule.xml檔案


  因為使用的是crc32slot演算法,且有3個數據庫,所以需要修改rule.xml中的配置




同時我們需要刪除掉ruledata目錄中的規則檔案,不然修改的3不會起作用



重啟mycat服務



檢視分配規則



2.3 在mycat中建立t_user表

 先刪除原來建立的t_user表,然後通過mycat建立t_user表示,通過mycat建立會多出來一個_slot欄位。

CREATE TABLE t_user (
`id` INT,
`name` VARCHAR (30),
`age` INT,PRIMARY KEY (

三、分庫測試

  在mycat客戶端插入資料,然後去對應的物理庫中查詢具體的情況

insert into t_user(id,name,age)values(1,'HG-93',14)

注意:插入語句的語法要完整,不要偷懶省略欄位,尤其是id自增長!!!

資料按照我們設定的規則分別儲存到了各自資料的表結構中了。

然後我們來看下查詢操作,通過mycat看能否將所有的資料都查詢出來,



關注微信公眾號【程式設計師的夢想】,專注於Java,SpringBoot,SpringCloud,微服務,Docker以及前後端分離等全棧技術。

相關推薦

MyCat教程實現分庫

 本文我們來介紹下MyCat的分庫分表操作 分庫分表 一、分片規則介紹   在rule.xml中定義了各種myCat支援的分片規則。 取模mod-long 自然月分片 sharding-by-month 按日期(天)分片sharding-by-date 按單月小時拆分sharding-by-hour 範圍約

阿里P8架構師談資料庫分庫、讀寫分離的原理實現,使用場景

為什麼要分庫分表和讀寫分離?   類似淘寶網這樣的網站,海量資料的儲存和訪問成為了系統設計的瓶頸問題,日益增長的業務資料,無疑對資料庫造成了相當大的負載,同時對於系統的穩定性和擴充套件性提出很高的要求。隨著時間和業務的發展,資料庫中的表會越來越多,表中的資料量也會越來越大,相應地,

阿里P8架構師談資料庫分庫、讀寫分離的原理和實現,以及使用場景

架構設計的重要的一環:資料庫分庫分表、讀寫分離,希望你看完本篇,能獨立完成該環節的設計!   為什麼要分庫分表和讀寫分離? 類似淘寶網這樣的網站,海量資料的儲存和訪問成為了系統設計的瓶頸問題,日益增長的業務資料,無疑對資料庫造成了相當大的負載,同時對於系統的穩定性和擴充套件性提出很高的要求。隨

分散式資料層中介軟體詳解如何實現分庫+動態資料來源+讀寫分離

優知學院 2018-10-13 12:10:20   分散式資料層中介軟體: 1.簡介: 分散式資料訪問層中介軟體,旨在為供一個通用資料訪問層服務,支援MySQL動態資料來源、讀寫分離、分散式唯一主鍵生成器、分庫分表、動態化配置等功能,並且支援從客戶端角度對

spingboot 整合mycat 實現分庫功能

程式碼已上傳到我的github上,如果有需要的話可以移步:https://github.com/1181888200/boot-mycat.git最後祝大家學業有成,歡迎關注和starhttps://github.com/1181888200/boot-mycat.githt

Mycat實現 分庫+讀寫分離(基於主從配置)

前兩篇文章分別講解了分庫分表 和主從配置下面來介紹 分庫分表+讀寫分離(基於主從配置)簡單的架構圖:配置:cd進入到mycat的conf目錄下 檢視 server.xml  rule.xml  schema.xml 三個配置檔案server.xml   與之前的配置基本沒有變

EF多租戶例項快速實現分庫

前言 來到這篇隨筆,我們繼續演示如何實現EF多租戶。 今天主要是演示多租戶下的變形,為下圖所示     實施 專案結構 這次我們的示例專案進行了精簡,僅有一個API專案,直接包含所有程式碼。 其中Controller,StoreContext,Entity都完全和以往的示例一模一樣,這裡

sharding-jdbc結合mybatis實現分庫功能

源自:https://www.cnblogs.com/zwt1990/p/6762135.html最近忙於專案已經好久幾天沒寫部落格了,前2篇文章我給大家介紹了搭建基礎springMvc+mybatis的maven工程,這個簡單框架已經可以對付一般的小型專案。但是我們實際專案

乾貨資料庫分庫基礎和實踐

資料庫架構的演變 在業務資料量比較少的時代,我們使用單機資料庫就能滿足業務使用,隨著業務請求量越來越多,資料庫中的資料量快速增加,這時單機資料庫已經不能滿足業務的效能要求,資料庫主從複製架構隨之應運而生。 主從複製是將資料庫寫操作和讀操作進行分離,使用多個只讀例項(s

spring+hibernate實現分庫操作

分庫的實現: 寫一個動態的資料來源類 public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey

詳解yii2實現分庫的方案與思路

前言 大家可以從任何一個gii生成model類開始程式碼上溯,會發現:yii2的model層基於ActiveRecord實現DA

springboot + mybatis + mysql + sharding-jdbc 實現分庫

配置檔案 mybatis.config-locations=classpath:mybatis/mybatis-config.

利用ShardingSphere-JDBC實現分庫

利用ShardingSphere-JDBC實現分庫分表 1. ShardingSphere概述 1.1 概述 業務發展到一定程度,分庫分表是一種必然的要求,分庫可以實現資源隔離,分表則可以降低單表資料量,提高訪問效率。 分庫分表的技術方案,很久以來都有兩種理念: 集中式的Proxy,實現MySQL客戶端協議

分庫(5) ---SpringBoot + ShardingSphere 實現分庫

分庫分表(5)--- ShardingSphere實現分庫分表 有關分庫分表前面寫了四篇部落格: 1、分庫分表(1) --- 理論 2、分庫分表(2) --- ShardingSphere(理論) 3、分庫分表(3) ---SpringBoot + ShardingSphere實現讀寫分離 4、分庫分表(4

Springboot2.x + ShardingSphere 實現分庫

之前一篇文章中我們講了基於Mysql8的讀寫分離(文末有連結),這次來說說分庫分表的實現過程。 概念解析 垂直分片 按照業務拆分的方式稱為垂直分片,又稱為縱向拆分,它的核心理念是專庫專用。 在拆分之前,一個數據庫由多個數據表構成,每個表對應著不同的業務。而拆分之後,則是按照業務將表進行歸類,分佈到不同的資料庫

分庫(7)--- SpringBoot+ShardingSphere實現分庫 + 讀寫分離

分庫分表(7)--- ShardingSphere實現分庫分表+讀寫分離 有關分庫分表前面寫了六篇部落格: 1、分庫分表(1) --- 理論 2、分庫分表(2) --- ShardingSphere(理論) 3、分庫分表(3) ---SpringBoot + ShardingSphere實現讀寫分離 4、分

SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 實現分庫

  今天專案不忙,想搞一下shardingJDBC分庫分表看看,主要想實現以下幾點: 捨棄xml配置,使用.yml或者.properties檔案+java的方式配置spring。 使用 Druid 作為資料庫連線池,同時開啟監控介面,並支援監控多資料來源。 不依賴 com.dangdang 的 shardi

MySQL 高可用mysql+mycat實現數據庫分片(分庫

native 分布 for 成功 img 問題 represent apache 新一代 本文引用於http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat實現數據庫分片(

MySQL 高可用mysql+mycat實現資料庫分片(分庫

什麼是MYCAT: 一個徹底開源的,面向企業應用開發的大資料庫叢集 支援事務、ACID、可以替代MySQL的加強版資料庫 一個可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集 一個融合記憶體快取技術、NoSQL技術、HDFS大資料的新型SQL Se

MyCat對MySQL數據庫進行分庫

文件 res names sel reg l數據庫 esp chan 規則 本篇前提: mycat配置正確,且能正常啟動。1、schema.xml<table>