MyCat数据库主键

  在现实的技术开发之中,对于数据表中的主键肯定不可能交由数据库独立生成,也就是说所有的主键都应该通过程序控制的形式来完成定义,那么这样一来所有的主键基本上都是以字符串的形式出现居多,如果现在使用的是字符串则必须根据字符串的内容实现水平分库,而如果使用的是数字,那么就可以采用之前的做法进行求模分库 。

1. 使用一张新的数据库,而这张表之中的id使用字符串存储:

DROP DATABASE IF EXISTS yootk ;
CREATE DATABASE yootk CHARACTER SET UTF8 ;
use yootk ;
CREATE TABLE member(
   mid VARCHAR(50) ,
   name VARCHAR(50),
   CONSTRAINT pk_mid PRIMARY KEY(mid)
) ;

2. 如果要想按照字符串的方式进行水平分库的话,这个时候就需要设置一个处理算法,修改rule.xml文件:

  》打开rule.xml配置文件:vim /usr/local/mycat/conf/rule.xml 

  》定义规则:

<tableRule name="member-mid-murmur">
        <rule>
                <columns>mid</columns>
                <algorithm>member-murmur</algorithm>
        </rule>
</tableRule>

  》定义算法:

<function name="member-murmur"
        class="io.mycat.route.function.PartitionByMurmurHash">
        <property name="seed">0</property>
        <property name="count">3</property>
        <property name="virtualBucketTimes">160</property>
</function>

3. 修改schema.xml配置文件:vim /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                <table name="member" primaryKey="mid" dataNode="dna,dnb,dnc" rule="member-mid-murmur"/>
        </schema>
        <dataNode name="dna" dataHost="localhost1" database="yootk" />
        <dataNode name="dnb" dataHost="localhost2" database="yootk" />
        <dataNode name="dnc" dataHost="localhost3" database="yootk" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.195.148:3306" user="root" password="mysqladmin">
                        <readHost host="hostS2" url="192.168.195.149:3306" user="root" password="mysqladmin" />
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.195.150:3306" user="root" password="mysqladmin"/>
        </dataHost>
        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.195.151:3306" user="root" password="mysqladmin"/>
        </dataHost>
</mycat:schema>

4. 重新启动MyCat进程:/usr/local/mycat/bin/mycat restart

5. 登录数据库操作端口实现数据增加:

mysql -uroot -p123456 -P8066 -DTESTDB -h127.0.0.1
》增加数据:
INSERT INTO member(mid,name) VALUES ('lee-a',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-b',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-c',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-d',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-e',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-f',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-g',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-h',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-i',@@hostname) ;
INSERT INTO member(mid,name) VALUES ('lee-j',@@hostname) ;

  那么此时的数据是根据字符串的ID形式进行了分配处理;

原文地址:https://www.cnblogs.com/luliang888/p/11148172.html