mycat全局序列号

1、全局序列化
  1) Mycat支持的全局序列化主要包括 本地文件方式,数据库方式,本地时间戳方式。实际生产环境,建议还是使用数据库方式。
 
2)数据库方式配置
   1、<system><property name="sequnceHandlerType">1</property></system>
        其中0代表本地文件方式,1代表数据库方式,2代表时间戳方式。
    2、创建 MYCAT_SEQUENCE表
         CREATE TABLE `MYCAT_SEQUENCE` (
              `name` varchar(50) NOT NULL,
              `current_value` int(11) NOT NULL,
              `increment` int(11) NOT NULL DEFAULT '100',
               PRIMARY KEY (`name`)
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
        然后插入一条记录
        insert into MYCAT_SEQUENCE ('name','current_value','increment') values ('GLOBAL',10000,100);
        insert into MYCAT_SEQUENCE  ('name','current_value','increment') values ('ORDER',10000,100);
        不是在MYCAT_SEQUENCE增加了一条记录,,Mycat就会认这个序列化,而是必须在sequence_db_conf.properties
       文件中,做好配置,
       
 
       然后可以在语句中可以这样写  
            next value for MYCAT_SEQGLOBAL
            next value for MYCAT_SEQORDER
         
 
        创建三个函数:
       CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64)          
              CHARSET utf8
              DETERMINISTIC
        BEGIN
                DECLARE
                    retval VARCHAR (64);
                    SET retval = '-999999999,null';
                    SELECT
                            concat( CAST(current_value AS CHAR),',',CAST(increment AS CHAR) ) INTO retval
                   FROM MYCAT_SEQUENCE
                   WHERE NAME = seq_name;
                   RETURN retval;
        END
 
        CREATE  FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) 
                  RETURNS varchar(64) CHARSET utf8
                  DETERMINISTIC
        BEGIN
                UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment WHERE name = seq_name;
                RETURN mycat_seq_currval(seq_name);
        END
 
       CREATE FUNCTION mycat_seq_setval(p_seq_name VARCHAR (50),p_value INTEGER)
           RETURNS varchar(64) CHARSET utf8
            DETERMINISTIC
      BEGIN
            UPDATE MYCAT_SEQUENCE SET current_value = p_value WHERE NAME = p_seq_name;
            RETURN mycat_seq_currval(seq_name);
       END
    
     3、在需要分片的表上,在SQL语句时,需要指定,类似于
      insert into es_order( id,order_no ,其他字段) values ( next value for MYCATSEQ_GLOBAL,'20160828161720001',其他字段  )

posted on 2016-08-29 09:13  dw每天坚持学习mz  阅读(258)  评论(0)    收藏  举报

导航