当前位置:   article > 正文

数据库中间件:Mycat分库分表(实战)_mycat分表分库表连接问题

mycat分表分库表连接问题

(1)理论基础

分片:将原来单个数据库的数据切分后分散存储在不同的数据库节点

分片节点:分片以后数据存储的节点

分片键:分片依据的字段

分片算法:分片的规则,例如随机、取模、范围、哈希、枚举以及各种组合算法

分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

MySQL分库分表主要有垂直分库、垂直分表、水平分库和水平分表4种:

1、垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

特点:

每个库的表结构都不一样。

每个库的数据也不一样。

所有库的并集是全量数据。

2、垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。特点:

每个表的结构都不一样。

每个表的数据也不一样,一般通过一列(主键/外键)关联。

所有表的并集是全量数据。

3、水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。

特点:

每个库的表结构都一样。

每个库的数据都不一样。

所有库的并集是全量数据。

4、水平分表:以字段为依据,按照一定策略,将一表的数据拆分到多个表中。

特点:

每个表的表结构都一样。

每个表的数据都不一样。

所有表的并集是全量数据

(2)schema.xml配置

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- DB01:逻辑数据库,TB_ORDER: 逻辑表,dataNode中的dn1、dn2、dn3位三个逻辑节点,rule为分片规则 -->

    <schema name="db01" checkSQLschema="true" sqlMaxLimit="100">

        <table name="t_person" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

    </schema>

    <!-- 配置三个逻辑节点,dn1对应的主机是 dhost1,其中的物理数据库为db01 -->

    <dataNode name="dn1" dataHost="dhost1" database="db01" />

    <dataNode name="dn2" dataHost="dhost2" database="db02" />

    <dataNode name="dn3" dataHost="dhost3" database="db03" />

      <!-- 主句 dhost1 的物理配置 ,这里面需要配置MySQL的url、user、password等等-->

    <dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"

              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

        <writeHost host="master" url="jdbc:mysql://127.0.0.1:3306?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true" user="root" password="root">

        </writeHost>

    </dataHost>

    <dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"

              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

        <writeHost host="master" url="jdbc:mysql://127.0.0.1:3306?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true" user="root" password="root">

        </writeHost>

    </dataHost>

    <dataHost name="dhost3" maxCon="1000" minCon="10" balance="0"

              writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">

        <heartbeat>select user()</heartbeat>

        <writeHost host="master" url="jdbc:mysql://127.0.0.1:3306?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true" user="root" password="root">

        </writeHost>

    </dataHost>

</mycat:schema>

(3)server.xml配置

    <user name="root" defaultAccount="true">

        <property name="password">root</property>

        <property name="schemas">db01</property>

    </user>

    <user name="user">

        <property name="password">user</property>

        <property name="schemas">db01</property>

        <property name="readOnly">true</property>

        <property name="defaultSchema">TESTDB</property>

    </user>

(4)分片规则

启动mycat服务、使用mycat连接MySQL、使用mycat创建表添加数据

db01:t_person:添加数据

id 为 1、2、3、5000000的数据添加到了ip为192.168.31.215的db01数据库中

id 为5000001的数据添加到了ip为192.168.31.215的db02数据库中

id 为15000000的数据添加到了ip为192.168.31.215的db03数据库中

分片原理如下:

1、分片规则配置在 schema.xml中 ,rule="auto-sharding-long" 就是分片规则

2、auto-sharding-long 为引用,具体规则在 conf/rule.xml 中配置

3、<columns>id</columns> 可以看出 时根据 id 列来分配的,分配算法为 rang-long,这里的rang-long也是一个引用,同样在这个文件中

4、可以看出具体的算法在 文件autopartition-long.txt 中,这个文件就在conf文件夹中

# range start-end ,data node index

# K=1000,M=10000.

0-500M=0

500M-1000M=1

1000M-1500M=2

-- 能够看出,id 在 0到500M在 0 号逻辑库,等等。最大可以存储id = 1500M的数据,存放在 2号逻辑库。

-- 若此时存储 id = 15000001的数据会怎样呢?

mysql> insert into tb_order(`id`,`title`) values(15000001,"order_15000001");

ERROR 1064 (HY000): can't find any valid datanode :TB_ORDER -> ID -> 15000001

mysql>

-- 能够看出插入失败,若想插入成功,就需要修改分片规则了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/407123
推荐阅读
相关标签
  

闽ICP备14008679号