앞서 우리가 포함 다음 같은 테이블의 데이터가 다른 데이터베이스에 저장됩니다 하위 라이브러리 하위 테이블 조작 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`에 의해 유지 될 수있다, 이것은 자신에 실현 될 수있다