MyCat 튜토리얼 식스 : 글로벌 일련 번호 - 기본 키 이후 글로벌 성장

  앞서 우리가 포함 다음 같은 테이블의 데이터가 다른 데이터베이스에 저장됩니다 하위 라이브러리 하위 테이블 조작 MyCat, 도입 主键유지 보수 문제를, 이번에는 확실히 처리하는 방식으로 아이디 증가에 하나의 데이터베이스를 사용할 수 없습니다 다음 우리는 MyCat을 통해 제공 할 수있는 방법은 여러 가지 성장을 달성하기 위해

글로벌 기본 키 증가

첫째, 로컬 파일 증가 모드

  먼저 우리가 디렉터리에있는 방법을 찾아, 즉 本地文件自增방법

1. 수정 분할 전략

  우리의 원래 구성의 파티션 전략은 crc32slot기본 키 증가가 지원하는, 그래서 우리는을 수정할 필요가있다auto-sharding-long

여기에 그림 삽입 설명

2. server.xml 파일을 수정

  server.xml 파일은 sequnceHandlerType생성 된 키 유형을 구성하는 데 사용됩니다

sequnceHandlerType 값 설명
0 로컬 파일 증가 모드
1 데이터베이스 증가 모드
현지 타임 스탬프 증분 모드

그래서 우리는 먼저 sequnceHandlerType의 값을 수정해야0

여기에 그림 삽입 설명

3.sequence_conf.properties 소개

  아래 conf 디렉토리 sequence_conf.properties관련 구성 정보 시퀀스

#Wed Oct 16 07:40:44 CST 2019
COMPANY.MAXID=2000
GLOBAL.MAXID=20000
COMPANY.HISIDS=
CUSTOMER.MAXID=2000
HOTNEWS.CURID=1000
ORDER.MINID=1001
CUSTOMER.HISIDS=
HOTNEWS.MINID=1001
GLOBAL.CURID=10002
ORDER.MAXID=2000
COMPANY.CURID=1000
CUSTOMER.CURID=1000
COMPANY.MINID=1001
GLOBAL.MINID=10001
HOTNEWS.MAXID=2000
CUSTOMER.MINID=1001
GLOBAL.HISIDS=
HOTNEWS.HISIDS=
ORDER.HISIDS=
ORDER.CURID=1000

  
  

중요한 것은입니다 GLOBAL.MAXID=20000 GLOBAL.CURID=10002 GLOBAL.MINID=10001당신이 당신의 자신을 설정할 수 있습니다

4. 시험 실현

함께 문 기본 키 필드를 삽입 next value for MYCATSEQ_GLOBAL대안

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,'HG-93',23)

  
  

둘째, 로컬 타임 스탬프 증분 모드

 길의 타임 스탬프를 사용하여, 우리는 필요하거나 분할 전략의 다른 할당 전략을 선택하지 않습니다.

여기에 그림 삽입 설명

여기에 그림 삽입 설명

1. server.xml 파일을 수정

  server.xml 파일이됩니다 sequnceHandlerType에 수정2

여기에 그림 삽입 설명

2. 다시 시작 mycat

  구성 파일을 수정, 당신은 발효를 만들기 위해 서비스를 다시 시작해야합니다.

여기에 그림 삽입 설명

3. 테스트 데이터

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,'HG-93',23)

  
  

너무 긴 시간 스탬프가됩니다 id개정 varchar입력합니다.

여기에 그림 삽입 설명

~ 성공을 생성

셋째, 데이터베이스 자동 증가 모드

1. 시퀀스 테이블 및 관련 기능을 만들기

  세 번째 방법은 다음과 같이 Mycat의 유지 보수 관련 데이터, 관련 공식 스크립트를 증가하는 데이터베이스 테이블 구조에서 관리 만드는 것입니다 :

DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (
NAME VARCHAR (50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 100,
PRIMARY KEY (NAME)
) ENGINE = INNODB ;
INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ('GLOBAL', 100000, 100);
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
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
;;
DELIMITER ;
DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
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
;;
DELIMITER ;
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), VALUE INTEGER) 
RETURNS VARCHAR(64) CHARSET utf8
    DETERMINISTIC
BEGIN UPDATE MYCAT_SEQUENCE  
                   SET current_value = VALUE  
                   WHERE NAME = seq_name;  
         RETURN mycat_seq_currval(seq_name);  
END
;;
DELIMITER ;

  
  

우리는 이러한 스크립트를 호출 demo2에 수행

여기에 그림 삽입 설명

2. server.xml을 수정

여기에 그림 삽입 설명

3. 수정 sequence_db_conf.properties 파일

  때문에 demo2해당 논리 라이브러리는 dn2그래서 우리는 여기 변경해야

여기에 그림 삽입 설명

4. 테스트

  서비스를 다시 시작하고 테스트 데이터를 삽입

여기에 그림 삽입 설명

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,'hg-93',23)

  
  

이러한 세 가지 방법 이외에 성공적인 차 키 생성은 또한 자동 증가 기본 키`zookeeper`에 의해 유지 될 수있다, 이것은 자신에 실현 될 수있다

추천

출처www.cnblogs.com/cxydmx/p/11740752.html