15.8.1 FEDERATED 스토리지 엔진의 개요
표준 스토리지 엔진 ( MyISAM
, CSV
, InnoDB
등) 중 하나를 사용하여 테이블을 작성하면 테이블은 테이블의 정의와 관련 데이터로 구성됩니다. FEDERATED
테이블을 생성하면 테이블 정의는 동일하지만 데이터의 물리적 스토리지는 원격 서버에서 처리됩니다.
FEDERATED
테이블은 두 가지 요소로 구성됩니다.
데이터베이스 테이블을 가진 원격 서버. 테이블 정의 (
.frm
파일에 저장됩니다)과 관련 테이블로 구성됩니다. 원격 테이블의 테이블 타입은MyISAM
이나InnoDB
를 포함한 원격mysqld
서버가 지원하는 어떤 타입이라도 괜찮습니다.데이터베이스 테이블을 가지는 로컬 서버. 테이블의 정의는 원격 서버에서 해당 테이블의 정의에 일치합니다. 테이블 정의는
.frm
파일에 저장됩니다. 그러나 로컬 서버에 데이터 파일은 없습니다. 대신 테이블 정의에는 원격 테이블을 가리키는 연결 문자열이 포함되어 있습니다.
로컬 서버에 FEDERATED
테이블에 쿼리 나 문을 실행하면 일반적으로 로컬 데이터 파일의 정보를 삽입, 업데이트 또는 삭제 작업은 수행하기 위해 대신 원격
서버에 보내져 원격 서버의 데이터 파일 를 업데이트하거나 원격 서버에서 일치하는 행을 리턴하기도합니다.
FEDERATED
테이블 설정의 기본 구조는 그림 15.1 "FEDERATED 테이블의 구조" 에서 보여줍니다.
그림 15.1 FEDERATED 테이블의 구조
FEDERATED
테이블을 참조하는 SQL 문을 클라이언트가 발행하는 경우 로컬 서버 (SQL 문이 실행되는 위치) 및 원격 서버 (데이터가 물리적으로 저장되는 위치) 사이의 정보 흐름은 다음과 같습니다 .
스토리지 엔진은
FEDERATED
테이블이있는 각 컬럼을 확인하여 원격 테이블을 참조하는 적당한 SQL 문을 작성합니다.문은 MySQL 클라이언트 API를 사용하여 원격 서버에 전송됩니다.
원격 서버는 문을 처리하고 로컬 서버는 문이 작성한 결과 (영향을받는 행의 수와 결과 세트)를 가져옵니다.
문이 결과 세트를 생성하는 경우, 각 컬럼은
FEDERATED
엔진이 요구하는 내부 스토리지 엔진 형식으로 변환되어 원래의 문을 발행 한 클라이언트에 결과를 표시하는 데 사용할 수 있습니다.
로컬 서버는 MySQL 클라이언트의 C API 함수를 사용하여 원격 서버와 통신합니다. mysql_real_query()
를 호출하여 문을 보냅니다. 결과 세트를 읽고, mysql_store_result()
를 사용하여 mysql_fetch_row()
를 사용하여 하나의 행을 가져옵니다.