美文网首页数据库技术
mysql数据库 垂直切分

mysql数据库 垂直切分

作者: 一生悬命Cat | 来源:发表于2019-03-18 11:06 被阅读28次

    小编按照以下顺序,逐步描述垂直切分 的有关信息。
    1.数据库切分原因
    2.数据库切分原理
    3.mycat切分配置
    4.跨分片全局表的实现
    5.分片实现集群
    6.垂直切分优缺点

    1.切分原因
    当我们使用了数据库复制,实现数据表的读写分离后,数据库的压力还是达到了瓶颈,我们需要切分数据库,来达到减轻数据库的压力,把数据库表分散到各个数据库中,实现分散负载效果。

    2.数据库切分原理

    数据库垂直切分.jpg

    1.上图分为 原始单机单节点数据库 与 使用mycat中间件 实现的数据库垂直切分两个部分。
    2.单机单节点难以承受压力,故使用mycat中间件进行切分, 生成虚拟逻辑库 ,里面包含虚拟逻辑表
    3.虚拟逻辑表通过节点 分别连接 真实数据库 来实现分散负载效果

    3.mycat切分配置
    1. schema.conf (逻辑数据库)
    2. server.conf (设置用户)
    3.因为不是水平切分,故不用设置rule.conf

    schema.conf

    <mycat:schema xmlns:mycat="http://io.mycat/">
    
      <schema name="test" checkSQLschema="false" sqlMaxLimit="100" >
        <table name="user"  dataNode="user"/>
        <table name="pro"    dataNode="pro"/>
        <table name="info"  dataNode="info"/>
     </schema>
    
     <dataNode name="user" dataHost="mysql146" database="user" />
      <dataNode name="pro" dataHost="mysql164" database="pro" />
      <dataNode name="info"  dataHost="mysql136" database="info" />
    
    
     <dataHost name ="mysql146" maxCon="1000" minCon="10" balance="3"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
      <heartbeat> select user() </heartbeat>
      <writeHost host="192.168.1.146" url="192.168.1.146:3306" user="root" password="password" />
      </dataHost>
       <dataHost name ="mysql164" maxCon="1000" minCon="10" balance="3"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
      <heartbeat> select user() </heartbeat>
      <writeHost host="192.168.1.164" url="192.168.1.164:3306" user="root" password="password" />
      </dataHost>
       <dataHost name ="mysql136" maxCon="1000" minCon="10" balance="3"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
      <heartbeat> select user() </heartbeat>
      <writeHost host="192.168.1.136" url="192.168.1.136:3306" user="root" password="password" />
      </dataHost>
    
    </mycat:schema>
    

    server .conf

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://io.mycat/">
        <system>
            <property name="nonePasswordLogin">0</property>
            <property name="useHandshakeV10">1</property>
            <property name="useSqlStat">0</property>
            <property name="useGlobleTableCheck">0</property>
            <property name="sequnceHandlerType">2</property>
            <property name="subqueryRelationshipCheck">false</property>
            <property name="processorBufferPoolType">0</property>
            <property name="handleDistributedTransactions">0</property>
            <property name="useOffHeapForMerge">1</property>
            <property name="memoryPageSize">64k</property>
            <property name="spillsFileBufferSize">1k</property>
            <property name="useStreamOutput">0</property>
            <property name="systemReserveMemorySize">384m</property>
            <property name="useZKSwitch">false</property>
        </system>
        <!--这里是设置的admin用户和虚拟逻辑库-->
        <user name="admin" defaultAccount="true">
            <property name="password">Abc_123456</property>
            <property name="schemas">test</property>
        </user>
    </mycat:server>
    

    4.跨分片全局表的实现
    当我们查询需要连表查询的时候,就需要夸分片查询
    在schema.conf 的虚拟库中设置 type =' global' dataNode='user,pro,info'
    比如说 以下配置 为了让user可以全局调用

     <schema name="test" checkSQLschema="false" sqlMaxLimit="100" >
        <table name="user"  dataNode='user,pro,info'   type =' global'  />
        <table name="pro"    dataNode="pro" />
        <table name="info"  dataNode="info"/>
     </schema>
    

    配置完以后我们把user表复制到各个节点的真实数据库

    5.分片实现集群

    为了让分片能够实现读写分离,加强数据库的负载能力,故使用数据库主从复制功能实现

    首先为每个分片 搭建数据库集群 (详细参考我的replication复制 或者 PXC集群搭建文章)

    prelication 复制方法 教程
    www.jianshu.com/p/6ab29651d2bd
    PXC 复制方法 教程
    www.jianshu.com/p/59404ae4bb0e
    

    然后在schema 中设置dataHost 增加读写分配功能

    <dataHost name ="mysql146" maxCon="1000" minCon="10" balance="3"  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
      <heartbeat> select user() </heartbeat>
      <writeHost host="192.168.1.146" url="192.168.1.146:3306" user="root" password="password" >
          <readHost host="xx.xx.xx.xx" url="xx.xx.xx.xx:3306" user="root" password="123456" />
          <readHost host="xx.xx.xx.xx" url="xx.xx.xx.xx:3306" user="root" password="123456" />
          <readHost host="xx.xx.xx.xx" url="xx.xx.xx.xx:3306" user="root" password="123456" />
      </writeHost>
    </dataHost>
    

    6.垂直切分优缺点
    优点:
    1.数据维护简单
    2.数据库分工明确
    缺点:
    单库性能瓶颈,不易数据扩展跟性能提高

    相关文章

      网友评论

        本文标题:mysql数据库 垂直切分

        本文链接:https://www.haomeiwen.com/subject/npommqtx.html