一篇秒懂mycat


一篇秒懂mycat

爱编码 2021-04-28

栏目: 精品阅读 ·

来源: 爱编码

简介  这篇文章主要介绍了一篇秒懂mycat以及相关的经验技巧,文章约30568字,浏览量437,点赞数7,值得推荐!

前言

什么是mycat

它是阿里开源的一个数据库中间件,专门为大数据量的项目做分库分表用的。有如下特点:

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

mycat权威指南:http://www.mycat.org.cn/document/mycat-definitive-guide.pdf

mycat架构

话不多说,一张mycat架构图就能让你知道mycat的角色以及作用。

mycat1.6版本架构如下:

由图可知,mycat位于数据库和应用层(APP)之间,它的角色就是帮我们管理数据库集群,而提供应用统一访问数据库接口。

垂直分库

垂直分库通俗来说就是按照功能划分,将不同的数据放在不同的数据库中。

一篇秒懂mycat

水平分表

水平分表通俗来说就是某表数据量太大了,那么我们很自然地想到是加多一个表来存储数据,这样查询速度才会更快。那么水平分表就是表结构是一样的,只不过存的数据不一样而已。

一篇秒懂mycat

逻辑库和逻辑表

逻辑库:通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

逻辑表:分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

mycat基本配置

当我们数据量特别大的时候需要分库分表的时候,那么我们可以考虑使用mycat。那么mycat具体如何做到分库分表的呢?接下来就要学习mycat的三大配置文件进行灵活配置就可以实现分库分表啦啦啦。。。

mycat主要的三大配置文件:server.xml、schema.xml、rule.xml

这三个配置文件位于mycat的安装目录的conf目录中。

server.xml

该文件几乎包含了所有 mycat 需要的系统配置信息。其中包括对外(应用)访问端口,编码,连接超时时间,最大连接数,事务级别,用户密码以及逻辑库等信息。

详细可以阅读下面的配置:



<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="serverPort">8066property> 
        <property name="managerPort">9066property>
        <property name="nonePasswordLogin">0property>
        <property name="bindIp">0.0.0.0property>
        <property name="frontWriteQueueSize">2048property>
        <property name="charset">utf8property> 
        <property name="txIsolation">2property> 
        <property name="processors">8property>
        <property name="idleTimeout">1800000property>
        <property name="useSqlStat">0property> 
        <property name="useGlobleTableCheck">0property> 
        <property name="sqlExecuteTimeout">300property>
        <property name="sequnceHandlerType">1property>   
        <property name="defaultMaxLimit">100property>
        <property name="maxPacketSize">104857600property>
    system>
  
    <user name="root">
 
        <property name="password">123456property>

        <property name="schemas">shop_dbproperty>
    user>
mycat:server>

更多关于server.xml的配置可参考以下文章:

http://suo.im/6lJTHF http://suo.im/6lJTK5 http://suo.im/6613kS

schema.xml

作为MyCat中重要的配置文件之一,它主要管理着MyCat的逻辑库、表、分片规则、DataNode以及DataHost。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。

标签解析:

  • schema:配置逻辑库,与server.xml中的逻辑库要对应。
  • table:配置逻辑表,包含主键,自增在,位于哪个节点等。
  • dataNode :配置逻辑库与物理库的对应关系
  • dataHost :配置连接数据库主机信息。

更多详细可以参考配置文件说明:


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

    <schema name="shop_db" checkSQLschema="false" sqlMaxLimit="100">
 
        <table name="region_info" dataNode="orddb,custdb,prodb" primaryKey="region_id" type="global"/>
        <table name="order_cart" dataNode="orddb" primaryKey="cart_id"/>
        <table name="order_customer_addr" dataNode="orddb" primaryKey="customer_addr_id"/>
        <table name="order_detail" dataNode="orddb" primaryKey="order_detail_id"/>
        <table name="order_master" dataNode="orddb01,orddb02,orddb03,orddb04" rule="order_master" primaryKey="order_id" autoIncrement="true"/>
        <table name="customer_balance_log" dataNode="custdb" primaryKey="balance_id"/>
        <table name="customer_inf" dataNode="custdb" primaryKey="customer_inf_id"/>
        <table name="customer_level_inf" dataNode="custdb" primaryKey="customer_level"/>
        <table name="customer_login" dataNode="custdb" primaryKey="customer_id"/>
        <table name="customer_login_log" dataNode="custdb" primaryKey="login_id"/>
        <table name="customer_point_log" dataNode="custdb" primaryKey="point_id"/>
        <table name="product_brand_info" dataNode="prodb" primaryKey="brand_id"/>
        <table name="product_category" dataNode="prodb" primaryKey="category_id"/>
        <table name="product_comment" dataNode="prodb" primaryKey="comment_id"/>
        <table name="product_info" dataNode="prodb" primaryKey="product_id"/>
        <table name="product_supplier_info" dataNode="prodb" primaryKey="supplier_id"/>
    schema>
    
    <dataNode name="orddb" dataHost="mysql10" database="order_db"/>
    <dataNode name="custdb" dataHost="mysql11" database="customer_db"/>
    <dataNode name="prodb" dataHost="mysql12" database="product_db"/>
    <dataNode name="orddb01" dataHost="mysql10" database="orddb01"/>
    <dataNode name="orddb02" dataHost="mysql10" database="orddb02"/>
    <dataNode name="orddb03" dataHost="mysql11" database="orddb01"/>
    <dataNode name="orddb04" dataHost="mysql12" database="orddb01"/>
    <dataNode name="mycat" dataHost="mysql10" database="mycat"/>

    
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysql10" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
          
        <heartbeat>select user()heartbeat>
        
        <writeHost host="192.168.56.10" url="192.168.56.10:3306" password="123456" user="im_mycat"/>
    dataHost>
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysql11" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()heartbeat>
        <writeHost host="192.168.56.11" url="192.168.56.11:3306" password="123456" user="im_mycat"/>
    dataHost>
    <dataHost balance="3" maxCon="1000" minCon="10" name="mysql12" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
        <heartbeat>select user()heartbeat>
        <writeHost host="192.168.56.12" url="192.168.56.12:3306" password="123456" user="im_mycat"/>
    dataHost>
mycat:schema>

关于更多ER图关系配置和其他参数意义。可参考以下文件或者《mycat权威指南》 https://blog.csdn.net/l1028386804/article/details/53385637 https://www.cnblogs.com/jihaibo/p/9051105.html https://www.cnblogs.com/ivictor/p/5131480.html

rule.xml

它的功能主要体现在以下两个方面:

  • 1、配置水平分片的分片规则
  • 2、配置分片规则所对应的分片函数

<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="order_master"> 
        <rule>
            <columns>customer_idcolumns>
            <algorithm>mod-longalgorithm>
        rule>
    tableRule>
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <property name="count">4property>
    function>
mycat:rule>

其中的function的name必须是唯一的,以上就是hash取模4的分片算法。

常见的分片算法:

  • 简单取模-PartitionByMod
  • 哈希取模-PartitionByHashMod
  • 分片枚举-PartitionByFileMap
  • 字符串范围取模分片

更多可以参考文章:https://blog.csdn.net/l1028386804/article/details/53402552 https://www.cnblogs.com/kingsonfu/p/10627423.html

最后

mycat的基本知识到此结束,如果需要了解更多可以阅读官网提供的《mycat权威指南》,后续会对其操作进行详细的描述哦,下期再见!!!


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

相关文章

你想快速掌握数据库中间件 MyCAT 的核心概念吗,读这一篇就够了!

秒懂设计模式之原型模式(Prototype Pattern)

秒懂设计模式之外观模式(Facade Pattern)

秒懂设计模式之组合模式(Composite Pattern)

秒懂设计模式之状态模式(State Pattern)

秒懂设计模式之迭代器模式(Iterator Pattern)

秒懂区块链核心技术之非对称加密

秒懂设计模式之原型模式(Prototype Pattern)

https://www.136.la/jingpin/show-85825.html