Mycat系列教程-配置文件(一)、schema.xml之table 标签(02)

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

table 标签

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" ></table> 

Table 标签定义了 MyCat 中的逻辑表,所有需要拆分的表都需要在这个标签中定义。

table 标签的相关属性:

属性名数量限制
nameString(1)
dataNodeString(1…*)
ruleString(0…1)
ruleRequiredboolean(0…1)
primaryKeyString(1)
typeString(0…1)
autoIncrementboolean(0…1)
subTablesString(1)
needAddLimitboolean(0…1)
1、name 属性

定义逻辑表的表名,这个名字就如同我在数据库中执行 create table 命令指定的名字一样,同个 schema 标 签中定义的名字必须唯一。

2、dataNode 属性

定义这个逻辑表所属的 dataNode, 该属性的值需要和 dataNode 标签中 name 属性的值相互对应。如果需 要定义的 dn 过多 可以使用如下的方法减少配置:

<table name="travelrecord" dataNode="multipleDn$0-99,multipleDn2$100-199" rule="auto-sharding- long" ></table> 

<dataNode name="multipleDn$0-99" dataHost="localhost1" database="db$0-99" </dataNode> 

<dataNode name="multipleDn2$100-199" dataHost="localhost1" database=" db$100-199" ></dataNode> 

这里需要注意的是 database 属性所指定的真实 database name 需要在后面添加一个,例如上面的例子中, 我需要在真实的 mysql 上建立名称为 dbs0 到 dbs99 的 database。

3、rule 属性

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

4、ruleRequired 属性

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

5、primaryKey 属性

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

6、type 属性

该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型。对应的配置:
• 全局表:global。
• 普通表:不指定该值为 globla 的所有表。 。

7、autoIncrement 属性

mysql 对非自增长主键,使用 last_insert_id()是不会返回结果的,只会返回 0。所以,只有定义了自增长主 键的表才可以用 last_insert_id()返回主键值。

mycat 目前提供了自增长主键功能,但是如果对应的 mysql 节点上数据表,没有定义 auto_increment,那 么在 mycat 层调用 last_insert_id()也是不会返回结果的。

由于 insert 操作的时候没有带入分片键,mycat 会先取下这个表对应的全局序列,然后赋值给分片键。这样 才能正常的插入到数据库中,最后使用 last_insert_id()才会返回插入的分片键值。

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

使用 autoIncrement=“true” 指定这个表有使用自增长主键,这样 mycat 才会不抛出分片键找不到的异常。

使用 autoIncrement=“false” 来禁用这个功能,当然你也可以直接删除掉这个属性。默认就是禁用的。

8、subTables 属性

使用方式添加 subTables=“t_order$1-2,t_order3”。
目前分表 1.6 以后开始支持 并且 dataNode 在分表条件下只能配置一个,分表条件下不支持各种条件的 join 语句。

9、needAddLimit 属性

指定表是否需要自动的在每个语句后面加上 limit 限制。由于使用了分库分表,数据量有时会特别巨大。这时 候执行查询语句,如果恰巧又忘记了加上数量限制的话。那么查询所有的数据出来,也够等上一小会儿的。
所以,mycat 就自动的为我们加上 LIMIT 100。当然,如果语句中有 limit,就不会在次添加了。
这个属性默认为 true,你也可以设置成 false`禁用掉默认行为。

好的,以下是mycat双主双从的schema.xml配置文件示例: ```xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "mycat_schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 数据库逻辑,用于在路由时识别 --> <schema name="test_db" checkSQLschema="false" sqlMaxLimit="100"> <!-- 逻辑表定义 --> <table name="user" primaryKey="id" dataNode="dn1,dn2" rule="user_rule" /> <!-- 分片规则定义 --> <rule name="user_rule"> <tableRule name="user_1" ruleType="partition"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> <dataSourceName>ds1</dataSourceName> </tableRule> <tableRule name="user_2" ruleType="partition"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> <value>1</value> </rule> <dataSourceName>ds2</dataSourceName> </tableRule> </rule> <!-- 数据源定义 --> <dataNode name="dn1" dataHost="dh1" database="test_db_1" /> <dataNode name="dn2" dataHost="dh2" database="test_db_2" /> <!-- 数据库连接池定义 --> <dataHost name="dh1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="MYSQL" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_1" user="root" password="root" /> <readHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_1" user="root" password="root" weight="100" /> </dataHost> <dataHost name="dh2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="MYSQL" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_2" user="root" password="root" /> <readHost host="localhost" url="jdbc:mysql://localhost:3306/test_db_2" user="root" password="root" weight="100" /> </dataHost> </schema> </mycat:schema> ``` 这是个简单的双主双从配置,其中包括: - 为test_db的逻辑库 - 为user的逻辑表,分别映射到dn1和dn2两个数据节点 - user_rule规则定义了两个分片规则(user_1和user_2),用于将数据分散在不同的数据节点上 - 数据源定义了两个数据节点(dn1和dn2),分别连接到两个MySQL实例(test_db_1和test_db_2) - 每个数据节点都有个读写分离的数据源定义,包括个写入节点和个读取节点 注意,这只是个示例配置文件,实际配置应根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值