您的位置:首页 > 其它

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

2017-05-17 17:24 344 查看


导言

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

schema.xml

schema.xml中,是以

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

所包围的。

而最先被包围的是
<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" />


datahost(name为localhost1),USERDB和TESTDB使用同一个

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

<property name="schemas">TESTDB,USERDB</property>

然后重启mycat服务



测试

show databases;
use USERDB
show tables;




schema标签的属性说明

属性名数量限制
dataNode任意String(0..1)
checkSQLschemaBoolean(1)
sqlMaxLimitInteger(1)
dataNode属性

该属性用于绑定逻辑库到某个具体的database上
以下面举例

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


tuser就绑定到dn1所配置的具体database上,可以直接访问这个database,没有配置的表则会走默认节点dn2

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

[b]checkSQLschema属性[/b]

该属性用于绑定逻辑库到某个具体的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 标签的属性说明

属性名数量限制
nameString(1)
dataNodeString(1..*)
ruleString(0..1)
ruleRequiredboolean(0..1)
primaryKeyString(1)
typeString(0..1)
autoIncrementboolean(0..1)
subTablesString(1)
needAddLimitboolean(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$1−2,t_order3”

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

备注

该功能在1.6版本开启

needAddLimit属性

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

默认为true。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: