开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(一):MyCat - 配置文件详解 - schema.xml 之 schema 配置详解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/755/detail/13254
MyCat - 配置文件详解 - schema.xml 之 schema 配置详解
内容介绍:
一、schema.xml
二、schema 逻辑库的配置
三、schema 标签属性
四、子标签 table
一、schema.xml
注释掉刚刚防火墙的操作,避免对后续操作造成影响。第二份配置文件为schema.xml 配置文件,分为 schema 的配置、dataMode 的配置和 dataMost 的配置三个部分,schema 是 schema.xml 里面最重要的配置文件。
schema. xml 作为 MyCat 中最重要的配置文件之一,涵盖了 MyCat 的逻辑库、表、分片规则、分片节点及数据源的配置。Mycat 最为核心的配置都是在 schema. xml 进行配置的。
二、schema 逻辑库的配置
对于逻辑库当中的配置有很多的属性
<schema name="ITCAST" checkSQL schema="false" sq1MaxL imit=" 100">
name定义逻辑库的库名,checkSQL schema 要么是 ture 要么是 false
<table name="TB._TEST" dataNode= "dn1, dn2, dn3" rule="auto-sharding-long"/>
</schema>
schema 标签用于定义 MyCat 实例中的逻辑库,一个 schema 下面也有对应的逻辑表 table,一个 MyCat 实例中,可以有多个逻辑库,可以通过 schema 标签采划分不同的逻辑库。schema 是 Mycat 里面的逻辑库,类似于 mysql 里面的数据库。MyCat 中的逻辑库的概念,等同于 MySQL 中的 database 概念 ,需要操作某个逻辑库下的表时,也需要切换逻辑库:
Use ITCAST;
三、schema 标签属性
1)name
指定逻辑库的库名,可以自己定义任何字符串;
2)checksQLschema
取值为 true / false ;
如果设置为 true 时,如果执行的语句为 "select * from ITCAST.TB_ TEST;"
,则 MyCat 会自动把 schema 字符去掉,把 SQL 语句修改为 "select * from TB_ TEST;"
可以避免 SQL 发送到后端数据库执行时,报 table 不存在的异常。如果设置为 false 则代表在执行语句的时候不会自动去除逻辑库的库名。
不过在编写 SQI 语句时,指定了一个不存在 schema, MyCat 是不会自动去除的 , 这个时候数据库就会报错,所以在编写 SQL 语句时,最好不要加逻辑库的库名,直接查询表即可。
3)sqlMaxLimit
指的是 SQL 语句的分页参数。当该属性设置为某个数值时,每次执行的 SQL 语句如果没有加上 limit 语句,MyCat 也会自动在 limit 语句后面加上对应的数值。避免检索全部的语句。也就是说,如果设置了该值为 100, 则执行 select * from TB_ TEST 与 select * from TB_ TEST limit 100 是相同的效果。即使没有 limit,它也会默认加一个 limit。limit 限制的数量是由 sqlMaxLimit 设置的参数确定的。
所以在正常的使用中,建立设置该值,这样就可以避免每次有过多的数据返回。
验证过程:
首先找到 mycat 配置文件,在配置文件中,有一个名为 log.4j2.xml 的文件,在这个里面把日志级别由 info 改为 debug,这样的话就可以看到一些详细的信息,改为 debug 之后重启 mycat,重启 my cat 之后,在另外一个窗口里面来查看 mycat当中的日志,
重新登录 mycat 后,通过 use ITCAST 切换逻辑库,执行 select* from TB_TEST 语句,这个时候只想的是查询全部的操作,这个时候需要查看的是 SQL 语句中输出的日志信息,
当执行这条语句的时候,在 my cat 底层就有 debug 级别的日志输出,现在执行的语句是 select* from TB_TEST,但是最终,my cat 在执行的时候会去 dn1、dn2、dn3 里面执行语句,都会去在执行语句后面,加上一个 limit,limit100 就是在sqlMaxLimit=’100’这个里面配置的 100。
四、子标签 table
1)name
Table 配置的是逻辑表,name 指的是逻辑表的表名,table 标签定义了 MyCat 中逻辑库 schema' 下的逻辑表,所有需要拆分的表都需要在 table 标签中定义。
<table name="TB_TEST" dataNode="dn1, dn2 , dn3" rule=" auto-sharding-long" />
2)dataNode
指的是数据节点,定义的逻辑表所属的 dataNode,该属性需要与 dataNode 标签中的 name 属性的值对应。如果- 张表拆分的数据,存储在多个数据节点上,多个节点的名称使用", "分隔。
3)rule
入门程序中配置的是 auto-sharding-long,这是分片规则的名称,auto-sharding-long 关联的是 rule 中的 tablerule。
该属性用于指定逻辑表的分片规则的名字,规则的名字是在 rule. xm1 文件中定义的,必须与 tableRule 标签中 name 属性对应。分片函数里面有映射文件。简单说rule 配置的就是单片规则,关联的是 rule.xml 中的配置
4)ruleRequired
该属性用于指定表是否绑定分片规则,如果配置为 true, 但是没有具体的 rule,程序会报错,默认为 ture。
5)PrimaryKey
逻辑表对应真实表的主键,简单说就是主键对应的属性。
如:分片规则是使用主键进行分片,使用主键进行查询时,就会发送查询语句到配置的所有的 datanode 上;如果使用该属性配置真实表
的主键,那么 MyCat 会缓存主键与具体 datanode 的信息,再次使用主键查询就不会进行广播式查询了,而是直接将 sQI 发送给具体的 Datanode。
6)type
该属性定义了逻辑表的类型,目前逻辑表只有全局表和普通表。
全局表: type 的值是 global,代表全局表
普通表:无需配置
7)autoIncrement
mysql 对非自增长主键,使用 last_insert_ id() 是不会返回结果的,只会返回0。所以,只有定义了自增长主键的表,才可以用 last_ insert_ id() 返回主键值。
mycat 提供了自增长主键功能,但是对应的 mysq1 节点上数据表,没有auto_increment ,那么在 mycat 层调用 last_ insert_ id() 也是
不会返回结果的。
如果使用这个功能,则最好配合 mycat 数据库模式的全局序列。因为在 mycat 中没有 autoIncrement 进行自增长主键的。
使用 autoIncrement="true" 指定该表使用自增长主键,这样 MyCat 才不会抛出分片键找不到" 的异常,autoIncrement 的默认值为 false。
8)needAddLimit
指定表是否需要自动在每个语句的后面加上limit限制,默认为 true.
后面这几项是在特定的场景去使用,在入门程序当中主要是配置了三个属性,即name 逻辑表的表名,datanode 这些表是分散在哪些数据节点当中进行存储,Rule 这张表的分片规则是什么。以上为 schema 逻辑库标签中的主要配置。