Mycat配置(二)-表分片的配置

   Mycat的表分片配置是经过table标签来完成的mysql

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

  Table 标签订义了 MyCat 中的逻辑表,全部须要拆分的表都须要在这个标签中定义。sql

  • name 属性

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

  • 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。ui

 

  • rule 属性

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

  • ruleRequired 属性

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

  • primaryKey 属性

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

  •  type 属性

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

以下是全局表的配置,每一个分片上这个表的数据都是同样的。rem

<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

   

  • 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” 来禁用这个功能,固然你也能够直接删除掉这个属性。默认就是禁用的。

 

  childTable 标签

  • joinKey 属性

   插入子表的时候会使用这个列的值查找父表存储的数据节点。

  • parentKey 属性

    属性指定的值通常为与父表创建关联关系的列名。程序首先获取 joinkey 的值,再经过 parentKey 属性指定 的列名产生查询语句,经过执行该语句获得父表存储在哪一个分片上。从而肯定子表存储的位置。

  • primaryKey 属性

      同 table 标签所描述的。

相关文章
相关标签/搜索