> 데이터 베이스 > MySQL 튜토리얼 > mycat 서브데이터베이스 및 테이블의 원리 분석

mycat 서브데이터베이스 및 테이블의 원리 분석

藏色散人
풀어 주다: 2019-06-15 14:49:46
원래의
9390명이 탐색했습니다.

mycat 서브데이터베이스 및 테이블의 원리 분석

MyCat은 오픈 소스 분산 데이터베이스 시스템이자 MySQL 프로토콜을 구현하는 서버입니다. 프런트엔드 사용자는 이를 데이터베이스 에이전트로 간주하고 MySQL 클라이언트 도구 및 명령줄 액세스를 사용할 수 있습니다. 여러 MySQL 서버와 통신하기 위한 MySQL 기본 프로토콜이며 JDBC 프로토콜을 사용하여 대부분의 주류 데이터베이스 서버와 통신할 수도 있습니다. 핵심 기능은 테이블과 데이터베이스를 나누는 것입니다. 즉, 큰 테이블을 N 개의 작은 테이블로 수평으로 나누고 백엔드에 저장하세요.

Mycat은 읽기-쓰기 분리, 테이블 및 데이터베이스를 실현할 수 있습니다.

마스터-슬레이브 복제는 MySQL과 함께 제공됩니다~

샤딩 모듈로 알고리즘 정보: ID 기반 모듈로 데이터베이스 클러스터(또는 테이블 수 기준 수량, 1개) mycat의 테이블은 하나의 라이브러리에 해당합니다)

MyCat 테이블 및 데이터베이스 원리 분석 사용

Mycat의 라우팅 결과는 쿼리 조건에 id 필드가 있는 경우 샤딩 필드와 샤딩 방법에 따라 결정됩니다. 쿼리는 특정 샤드에 속합니다. 조각화 없이 필드를 쿼리하면 모든 DB가 쿼리되고 결과가 캡슐화되어 클라이언트로 전송됩니다.

/mycat/conf/log4j2.xml 로그 수준을 debug

로 수정하세요. 예:

쿼리에서

select * from user_info
로그인 후 복사

세 개의 DB 요청 보내기

쿼리가 원본인 경우(조건 없이)

다음으로 변환됩니다.

select * from db1.user_info
select * from db2.user_info
select * from db3.user_info
로그인 후 복사

마지막으로 결과 세트는 mycat에 의해 캡슐화되어 클라이언트에 반환됩니다.

여기에 id = 1을 추가하면 이러한 조건에서 mycat은 db2에서 1%3=1로 변환합니다! id = 1인 db2.user_info에서 select *로 변환합니다. 쿼리가 샤딩인 경우 매우 효율적입니다. 하나만 보내주시면 완료

프래그먼트 필드가 아니면 3개 보내드립니다! 예를 들어, name = 'jack'은 결과를 반환하기 위한 조건에 따라 각 데이터베이스에 세 개의 쿼리를 보냅니다.

select * from user_info limit 0,2
로그인 후 복사

어떤 데이터 샤드인지 주의하세요. 그렇죠?


3개의 라이브러리에 3개의 선택 요청을 보내 3개의 쌍과 6개의 결과를 얻습니다.

무작위로 쌍을 선택하여 클라이언트에 반환합니다.

정렬 조건이 추가되면 어떻게 되나요?

 select * from user_info order by id  limit 0,2   (相当于取出最大的两条数据)
로그인 후 복사
먼저 3개의 선택 항목을 보내고 각 선택 항목은 가장 큰 항목 2개를 보낸 다음 포괄적인 선택을 위해 mycat에 반환하고 가장 큰 항목 2개를 클라이언트에 반환합니다.

 select * from user_info   limit 0,3
로그인 후 복사

인 경우 각 요청은 변경 사항은 무작위입니다!

db1은 db2와 db3 중 두 가지를 무작위로 가져옵니다

위 내용은 mycat 서브데이터베이스 및 테이블의 원리 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿