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 (相当于取出最大的两条数据)
select * from user_info limit 0,3
인 경우 각 요청은 변경 사항은 무작위입니다!
db1은 db2와 db3 중 두 가지를 무작위로 가져옵니다
위 내용은 mycat 서브데이터베이스 및 테이블의 원리 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!