mycat 分表原理,是在原有分片的基礎上把原來分片的路由改寫為改寫sql:
例如對於取模,分為3個片的配置:
分庫模式下是:insert into table(xxx)values(1,name);
router:{
node1:insert into table(xxx)values(1,name) ,datanode1,
node2:insert into table(xxx)values(2,name) ,datanode2,
node3:insert into table(xxx)values(3,name) ,datanode3,
},
分表模式是: insert into table(xxx)values(1,name);
router:{
node1:insert into table1(xxx)values(1,name) ,datanode1,
node2:insert into table2(xxx)values(2,name) ,datanode1,
node3:insert into table3(xxx)values(3,name) ,datanode1,
},
由於1.6已經是release,現有的1.6分支當作1.6.5開發,導致無法修改,因此使用分表只能用替換class或者jar的方式:
替換class(可以用於生產基於1.6release):classes\io\mycat\route\function, 附件:http://songwie.com/attached/mycat/AbstractPartitionAlgorithm.class
替換jar:lib目錄下mycat-server:(基於1.6.5開發板)http://songwie.com/attached/mycat/Mycat-server-1.6.5-DEV.jar
----------------------------------------------------------
配置為:
scheml:
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="travelrecord" subTables="travelrecord$1-3" dataNode="dn1" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mycat" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"
dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat> <writeHost host="hostS1" url="localhost:3306" user="root" password="123456" />
</dataHost>
rule配置:
<tableRule name="mod-long"> <rule> <columns>id</columns>
<algorithm>mod-long</algorithm> </rule> </tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">3</property>
</function>
注意:目前只做到單庫分表,多庫分表還不支持,可能會在1.6.5支持,
分表模式下只能配置一個dataNode,同時添加
subTables="travelrecord$1-3"