mycat分库的目的是为了让数据进行分片存储,目的是为了降低每个数据库的压力。
分片规则主要是在rule.xml文件里面配置。
rule.xml主要标签介绍:
打开配置文件,上面是<tableRule name="分片规则名称">,
<tableRule name="">
<rule>
<columns>使用规则的列</columns>
<algorithm>crc32slot</algorithm>算法指向
</rule>
</tableRule>
对应的是配置文件下面:
<function name="分片规则名称" class="分片规则的实现">
<function name="crc32slot" class="">
<propertry name = "count">2</propertry>要分片的数据库节点数量,必须指定,否则没法分片
</function>
常用的分片规则介绍:
1.auto-sharding-long范围约定
以500万为单位,实现分片规则。
逻辑库A对应dataNode-db1和db2,1-500万保存在db1中,500万零1到1000万保存在db2中,1000万零1到1500万保存在db1中,依次类推。
2.crc32slot规则
在CRUD操作时,根据具体数据的crc32算法计算,数据应该保存在哪一个dataNode(物理数据库)中
配置分片规则需要注意的地方
1.<columns>id</columns>中推荐配置主键列
2.所有的tableRule只能使用一次。如果需要为多个表配置相同的分片规则,那么需要再次定义该规则。rule中定义的是表的分片规则,每一个规则只能对应一个表,如果多个表使用相同的规则的话,那么就需要在rule.xml中定义多个tableRule,只是名字不一样,columns不一样。
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<tableRule name="rule2">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<schema name="TEST" checkSQLschema="false" sqlMaxLimit="100"> <!--name:逻辑库的名称,可以随便起。-->
<table name="basic_user" dataNode="dn1,dn2,dn3" rule="rule1"/>
<table name="basic_user" dataNode="dn1,dn2,dn3" rule="rule2"/><!--name:物理库的表明。dataNode和下面的name对应,如果是多个库,就用,隔开。rule:分库规则,根据算法来决定表中的数据插入到下面的哪个库中-->
</schema>
3.在crc32slot算法中的分片数量一旦给定,mycat会将该分片数量和slor的取值范围保存到文件中。在修改分片数量时是不会生效的,需要将该文件删除。文件位置位于conf目录中的ruledata目录中。
mycat分库的配置
准备:在master上创建3个库,分别为demo1,demo2,demo3
1.修改Schema.xml
2.通过mycat来新建表,不能直接去master中创建表,因为使用了crc32slot算法的话,建表的时候会附带一个字段_slot,所以建表的时候只能通过mycat来创建。
使用mycat插入数据时,语句中必须要指定所有的列。即使是一个完全项插入也不允许省略列名。