mycat中间件(五)mycat配置文件之schema.xml 第一部分

  • 导言
  • schemaxml
    • schema标签
      • schema标签的说明
      • 两个逻辑库的实践
      • schema标签的属性说明
    • table标签
      • table 标签的属性说明
  • 结语

导言

前面的文章,我们介绍了关于 mycat 基本机构以及一些配置文件的作用,从本章开始,讲述有关于配置文件的内容。本文讲的是有关于 schema.xml 的相关配置。


schema.xml


schema.xml 中,是以

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

所包围的。


而最先被包围的是标签,故而我们先说明一下schema标签

schema标签

<mycat:schema xmlns:mycat="http://io.mycat/">
     <schema name="TESTDB" checkSQLschema="false"         sqlMaxLimit="100">
         ....
    schema>
    ....
mycat:schema>

在schema.xml中,结构就如上所示。schema标签总的来说,属性是由这一行所定义的。

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">schema>

这个配置说明了三点

  • name属性,说明了mycat中,会有一个逻辑库,该库的名字是TESTDB;
  • checkSQLschema为false,说明当执行
    select * from TESTDB.travelrecord
    语句的时候,mycat不会把表示的schema(该处是TESTDB)给去掉。该处被去掉的schema(即TESTDB)是由schema标签所定义的。
  • sqlMaxLimit说明了在每条执行的SQL 语句,如果没有加上limit 语句,MyCat 也会自动的加上所对应limit 100数值。

schema标签的说明

schema 标签用于定义 MyCat 实例中的逻辑库, MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用 schema 标签来划分这些不同的逻辑库。

1.6版本,如果你没有随便更改设置的话,只有一个 schema (逻辑库),而且命名为 TESTDB

schema

如果配置了不同的两个逻辑库,那么逻辑库的基本意思,其实和mysql中所讲述的Database是一致的。而需要注意的是在查询这两个不同的逻辑库中表的时候需要切换到该逻辑库下才可以查询到所需要的表

两个逻辑库的实践


我们需要创建一个表。我们之前的安装(前面文章所安装)已经有一个TESTDB逻辑库。

我们输入下列命令:

mysql -u root -p ## 登录mysql
create schema db4 ## 创建database
use db4 ## 使用该database

创建 people

CREATE TABLE `people` (   `people_id` varchar(64) NOT NULL DEFAULT '0',   `people_name` varchar(64) DEFAULT NULL,   PRIMARY KEY (`people_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


我们可以在schema.xml配置增加一行:

....
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100">
    <table name="people" dataNode="dn4" >table>
schema>
....
<dataNode name="dn4" dataHost="localhost1" database="db4" />

datahostnamelocalhost1USERDBTESTDB使

我们还需要修改server.xml,去修改用户的权限

<property name="schemas">TESTDB,USERDBproperty>

然后重启 mycat 服务

mycat中间件(五)mycat配置文件之schema.xml 第一部分_第1张图片

测试

show databases;
use USERDB
show tables;

mycat中间件(五)mycat配置文件之schema.xml 第一部分_第2张图片


schema标签的属性说明

属性名 数量限制
dataNode 任意String (0..1)
checkSQLschema Boolean (1)
sqlMaxLimit Integer (1)

  • dataNode属性

    该属性用于绑定逻辑库到某个具体的 database

以下面举例

<schema name="USERDB" checkSQLschema="false"        sqlMaxLimit="100" dataNode="dn2">
    <!—配置需要分片的表-->
    <table name="tuser" dataNode="dn1"/>
schema>

tuserdn1database,访database,dn2

没有配置在分片里面的表工具查看无法显示,但是可以正常使用


  • checkSQLschema属性
    该属性用于绑定逻辑库到某个具体的 database

    • 该值若为true
      • 非schema 指定的名字
        select * from db1.travelrecord;,若 db1 不是 schema 指定,则mycat不会删除 db1 .
      • schema 指定的名字
        select * from TESTDB.travelrecord;,若 TESTDB schema 指定,则 mycat 会修改为select * from travelrecord;即把表示schema 的字符去掉

  • sqlMaxLimit属性
    当该值设置为某个数值时。每条执行的SQL 语句,如果没有加上limit 语句,MyCat 也会自动的加上所对应的值。

    例如设置值为100,执行select * from TESTDB.travelrecord;的效果为和执行select * from TESTDB.travelrecord limit 100;相同。

    设置该值的话,MyCat 默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。

当然SQL 语句中也显式的指定limit 的大小,不受该属性的约束。需要注意的是,如果运行的schema 为非拆分库的,那么该属性不会生效。需要手动添加limit 语句。

table标签

这是一个有关 table 的例子:

<table name="hotnews" primaryKey="hotnews_id" autoIncrement="true" dataNode="dn1,dn2,dn3"rule="mod-long" />

该例子中,table 标签定义了MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。那么我们可以从上诉例子看出什么信息?

该例子中,定义了一个hotnews表,其主键定义为“hostnews_id”,设置为可自增,而且其分片规则是mod-long,其数据分片分在了dn1,dn2,dn3三个分片节点上。


table 标签的属性说明

属性名 数量限制
name String (1)
dataNode String (1..*)
rule String (0..1)
ruleRequired boolean (0..1)
primaryKey String (1)
type String (0..1)
autoIncrement boolean (0..1)
subTables String (1)
needAddLimit boolean (0..1)

  • name属性
    定义逻辑表的表名。唯一字段。


  • dataNode属性
    定义这个逻辑表所属的 dataNode , 该属性的值需要和 dataNode 标签中 name 属性的值相互对应。

    如果需要定义的 dn 过多可以使用如下的方法减少配置:

<table 
    name="travelrecord" 
    dataNode="multipleDn$0-99,multipleDn2$100-199"
    rule="auto-shardinglong">
table>
<dataNode 
    name="multipleDn" 
    dataHost="localhost1" 
    database="db$0-99" >
dataNode>
<dataNode 
    name="multipleDn2" 
    dataHost="localhost1" 
    database=" db$0-99" >
dataNode>

  • rule属性
    用于指定逻辑表要使用的规则名字,规则名字在 rule.xml 中定义,必须与 tableRule 标签中 name 属性属性值一一对应

  • ruleRequired属性
    该属性用于指定表是否绑定分片规则,如果配置为 true ,但没有配置具体 rule 的话 ,程序会报错。

  • primaryKey属性
    该逻辑表对应真实表的主键

例如:分片的规则是使用非主键进行分片的,那么在使用主键查询的时候,就会发送查询语句到所有配置的DN 上,如果使用该属性配置真实表的主键。那么MyCat 会缓存主键与具体DN 的信息,那么再次使用非主键进行查询的时候就不会进行广播式的查询,就会直接发送语句给具体的DN,但是尽管配置该属性,如果缓存并没有命中的话,还是会发送语句给具体的DN,来获得数据。


  • type属性
    该属性定义了逻辑表的类型。
    • global 全局表

  • autoIncrement属性
    如果要使用这个功能最好配合使用数据库模式的全局序列。

    默认是禁用的。

    autoIncrement= true ”指定这个表有使用自增长主键。此时使用 last_insert_id() 才会返回插入的分片键值。

  • subTables属性
    使用方式添加 subTables= t_order$12,t_order3

    dataNode 在分表条件下只能配置一个,分表条件下不支持各种条件的 join 语句。

备注

该功能在1.6版本开启


  • needAddLimit属性
    指定表是否需要自动的在每个语句后面加上limit 限制。

    默认为 true

结语

本文为介绍配置文件schema.xml的第一部分,介绍了schema标签和table标签的相关属性。

希望各位期待下一篇文章的撰写。

你可能感兴趣的:(mycat)