zoukankan      html  css  js  c++  java
  • Mycat配置及使用详解.

    首先我们来看下什么是Mycat:
    MyCat:开源分布式数据库中间件, 这里定义的很简单, 就是分布式数据库的中间件. 
    其实Mycat 是可以时mysql进行集群的中间件, 我们可以对mysql来分库分表 来应对日益增长的数据量. 每台机器只存少量数据, 数据总和是分布式的机器上数据量总和. 



    例如我们一个表中有512条数据(当然实际情况可能有成千上万条数据), 那么现在我们有三台机器装有mysql数据库, 我们想将这些数据按照一定规则的存储在三台机器上, 那么我们设定规则: 
    表的id%/512 取的结果按照区间分别存储在三个不同的数据库中, 但是这三个数据库又要统一的对外提供服务. 
    那么这些分割算法 以及 统一对外提供服务是谁来提供支持的呢? 当然就是我们今天要讲的Mycat了.

    在Linux下连接Mysql:



    连接Linux中的mysql数据库:(这里我们的Linux IP为192.168.200.140)



    查看表结构:



    查看1库中的商品ID(这个已经是通过Mycatt分好的)



    查看1库中的商品ID(这个已经是通过Mycatt分好的)



    查看1库中的商品ID(这个已经是通过Mycatt分好的)



    启动Mycat



    连接Mycat:


    在项目组中设置默认连接为Mycat:(关于这里数据库为什么是babasport而不是babasport1或babasport2等, 后面会说明)


    Mycat的配置:



    1, 用户名及密码设置:server.xml:



    2, 逻辑库中的定义表:schema.xml:

    这里需要说一下, 因为bbs_color和bbs_brand表中的数据很少, 所以这里不需要分库分表, 直接设置成全局表就行, 也就是这两个表中的数据在1,2,3 库中都是一样的.
    还有就是childTable, 我们拿bbs_product和bbs_sku来说, 因为商品product和库存bbs_sku是一对多的关系, 那么我们就希望商品id为1 的商品所对应的库存都是在同一个库中的, 这样查询的话就不用跨库了.
    同样这里还有一个属性是rule="sharding-by-pattern", 那么接下来我们就要看下这里设定的规则了.


    因为上面的schema标签中有定义的那么为babasport, 而且dataNode节点又分别指向dn1, dn2, dn3, 所以这里就可以做到对应了.
    我们在项目连接的时候 直接是连接babasport的.


    3, 查看分片规则: rule.xml 

    这里指定算法为sharding-by-pattern.

    查看算法sharding-by-pattern, 这里指定算法存储在partition-pattern.txt
    这里是通过PartitionByPattern这个类来实现的, 这里是对512进行取模, 如果取模过程中出现异常, 那么就放到3库(0,1,2)中进行存储.


    查看算法指定文件:

     

    这里就可以一目了然的查看到 0-127 是放在1库中, 128-255 是放在2库中, 256-512 是放在3库中.
    同样Mycat还支持动态扩容, 当我们的数据量越来越大时我们还可以加机器来分担压力, Mycat可以动态的取扩容. 这里就不再讲具体的实现原理了.
    关于Mycat的内容就说到这里, 更深层次的东西大家可以继续查阅相关资料, 我这里只是做一个介绍和入门.

     

     





  • 相关阅读:
    Http中的patch
    如何实现腾讯地图的路径规划功能?
    各类数据库分页SQL语法
    ABC222F
    ABC222 G
    LG5308 [COCI2019] Quiz(wqs二分+斜率优化DP)
    [USACO21OPEN] Portals G(Kruskal)
    【做题笔记】SP27379 BLUNIQ
    【做题笔记】CF938C Constructing Tests
    CSP-J/S2021 自闭记
  • 原文地址:https://www.cnblogs.com/wang-meng/p/5861301.html
Copyright © 2011-2022 走看看