• 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形式进行了分配处理;

  • 相关阅读:
    常量的三种定义方式和static在c语言中的三种修饰
    字符串的定义方式;输出和计算长度时的细节
    指针小白:修改*p与p会对相应的地址的变量产生什么影响?各个变量指针的长度为多少?
    习题 :任意输入十个数按大小排序;构造简单数学运算模块(形参和实参)
    for循环简单实例(打印乘法表,打印菱形)
    几个简单if程序的细节比较与加法程序设计
    冒泡排序法,两个数组内容的互换,两个变量之间的交换
    scanf加不加 ?
    jqplot导入包小结
    使用ajax与jqplot的小体会
  • 原文地址:https://www.cnblogs.com/luliang888/p/11148172.html
Copyright © 2020-2023  润新知