zoukankan      html  css  js  c++  java
  • SpringBoot集成MyCat

    什么是Mycat

      MyCat是一个开源的分布式数据库系统,前端用户可以把它看作是一个数据库代理。其实现的核心原理是“拦截” 。Myacat拦截用户发送过来的Sql语句,做一些特定的分析:如分片分析,路由分

    析,读写分析,读写分离分析。然后将SQL发往真实的数据库。不同于其他的中间件比如druid连接池,Mycat使用的是Nio异步通信机制(非阻塞型的),它的线程池数量默认为1,实际生产环境线

    程数=CPU的核数。推荐使用Mycat1.6版本,项目中MyCat配置代替原数据源的配置,非常简单。

    应用场景:

    1)单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;

    2)分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;

    3)多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;

    4)报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计; 替代 Hbase,分析大数据;

    5)作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选

    SpringBoot集成MyCat

      Mycat已经帮我们在内部实现了路由的功能,我们只需要在Mycat中配置以下切分规则即可,对于开发者来说,我们就可以把Mycat看做是一个数据库,接下来我们开始搭建环境:

    步骤一

      Mycat是使用java写的数据库中间件,所以要运行Mycat前要准备要jdk的环境,要求是jdk1.7以上的环境。所以需要在系统中配置JAVA_HOME的环境变量.

    步骤二

    从官网下载Mycat,http://dl.mycat.io/1.6-RELEASE/ 我们是基于CentOS7来搭建Mycat环境的,所以下载版本:

    Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

    步骤三

    将下载好的安装包上传到服务器上并解压.

    tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

    步骤四

    配置切分规则:

    1)修改mycat/conf/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="user" primaryKey="id" dataNode="dn01,dn02" rule="rule1" />  
        </schema>
        
        <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->  
        <dataNode name="dn01" dataHost="dh01" database="db01" />  
        <dataNode name="dn02" dataHost="dh01" database="db02" />   
        
        <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->  
        <dataHost name="dh01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
                <heartbeat>select user()</heartbeat>  
                <writeHost host="server1" url="127.0.0.1:3306" user="root" password="WolfCode_2017"/>  
        </dataHost> 
    </mycat:schema>

    名词解析

    <schema>:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB
    <table>:表示在mycat中的逻辑表配置,逻辑表名称为:user,映射到两个数据库节点dataNode中,切分规则为:rule1(在rule.xml配置)
    <dataNode>:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.
    <dataHost>:真实的数据库的地址配置
    <heartbeat>:用户心跳检测
    <writeHost>:写库的配置

    2)修改mycat/conf/rule.xml的内容

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
    <mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="rule1">
            <rule>
                <columns>id</columns>
                <algorithm>mod-long</algorithm>
            </rule>
        </tableRule>
        <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
            <!-- how many data nodes -->
            <property name="count">2</property>
        </function>
    </mycat:rule>

    这里定义的是切分规则,是按照id列进行切分,切分规则是采取取模的方式,<property name="count">2</property>:这里配置了我们有拆分了多个库(表),需要和前面配置

    <table name="user" primaryKey="id" dataNode="dn01,dn02" rule="rule1" />

    中的dataNode个数一致,否则会出错。

    步骤五

    在数据库中创建两个数据库db01,db02.

    步骤六

    启动mycat,执行mycat/bin/startup_nowrap.sh

    步骤七

    在SpringBoot项目中.修改数据源的配置,将原来的数据源改为MayCat的配置

    application.properties配置如下

    #配置数据源
    spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
    #这里配置的是Mycat中server.xml中配置账号密码,不是数据库的密码。
    spring.datasource.druid.username=root
    spring.datasource.druid.password=123456
    #mycat的逻辑库 端口也是mycat的
    spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB

    这样整个MayCat就集成好了,在实际项目中MyCat会对我们的SQL语句进行一个拦截分析,然后把他发送到具体的数据库执行。小盆友们是不是很简单了。

    .

  • 相关阅读:
    c++ primer 读书笔记
    如何利用c++编写不能被继承、但可以在类外定义对象的类
    为什么对多线程编程这么怕?pthread,sem,mutex,process
    死锁的理解
    动态规划--找零钱 coin change
    C++ STL中Map的按Key排序和按Value排序
    c++ STL sort struct comp
    《剑指offer》第二十五题(合并两个排序的链表)
    《剑指offer》第二十四题(反转链表)
    《剑指offer》第二十三题(链表中环的入口结点)
  • 原文地址:https://www.cnblogs.com/zeussbook/p/12941466.html
Copyright © 2011-2022 走看看