오라클에서는 물리적으로 떨어져 있는 삽입/삭제/수정/조회/조인 등의
서버간의 데이터 이동이 요구될 때, DBLink 라는 녀석을 사용한다...... 고 하지만,
맞을까봐 개인적으로는 사용만 해보고 실제로 만든 적은 없다.. --;;
한 가지 분명한 것은 synonym이 설정되어 있지 않은 이상,
@를 사용하여 접근 한다는 것뿐
암튼 간에,
물리적으로 떨어져 있지만,
논리적으로는 바로 옆의 테이블인양 사용하는 것은,
Performance에 상관 없이 매력적이고, 편리한 것이라는 점에 이견이 없을 듯 하다.
그렇다면, Oracle에는 있는 이 DBLink 기술이,
MySQL에도 있지 않을까?
그래서,
여기 저기 물어도 보고, 레퍼런스 메뉴얼도 달달이 읽다가,
FEDERATED ENGINE 이라는 녀석을 발견했다.
[FEDERATED ENGINE 설명]
Federated Engine은,
실제적으로 물리적인 저장공간을 확보하여 데이터를 복사해서 갖는 것이 아니다.
무슨 말이냐 하면... 흠...
마치 C에서의 포인터나, C++, Java에서의 참조형 처럼,
단순히 틀에 대한 정보만을 지니고,
그것을 원거리에서 MySQL의 API를 이용하여 접근하는 방식이다.
그리하여, 물리적으로 격리되어 있는 다른 MySQL 서버의 테이블로의 접근이
로컬 내에서 가능하게 만들어준다.
(5.0 에서는 MySQL 서버간에만 사용가능하며, 추후에 이기종 DB 와의 연계도 개발할꺼라는데...
언제나 될런지 -0-;;;)
물론,
DBLink와 마찬가지로 물리적 거리감은 실행 속도의 하락과
DDL(Data Definition Language) 같은 쿼리는 적용 되지 않는 부효과를 발생시킨다.
그런 이유로,
만약 로컬에서 DROP TABLE 명령어를 사용하여 테이블을 DROP 시킨다면,
로컬만 DROP되고, 원거리의 TABLE에는 영향을 미치지 않는다.
[FEDERATED ENGINE 사용방법]
먼저, 원본 테이블이 어딘가 존재해야 한다.
# 원본 테이블
USE testdb;
CREATE TABLE testtbl (
id INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(100) DEFAULT NULL,
col2 VARCHAR(200) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
그리고 난 후에야, 로컬에 동일한 구조로 테이블을 생성한다.
단, 이번에는,
****************************************************************************************
1. ENIGINE : ENGINE=FEDERATED
2. CONNECTION 정보 : 'mysql://아이디:패스워드@IP또는DOMAIN:PORT/DB명/TABLE명'
****************************************************************************************
# FEDERATED 된 테이블
CREATE TABLE testtbl (
id INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(100) DEFAULT NULL,
col2 VARCHAR(200) DEFAULT NULL
) ENGINE=FEDERATED
DEFAULT CHARSET=UTF8
CONNECTION='mysql://scott:tiger@192.168.10.2:3306/testdb/testtbl;
라고 만들면,
그 때부터 INSERT, DELETE, UPDATE, SELECT 가 가능해지며,
INDEX를 사용할 수 있게 된다.
[FEDERATED 주의할 점]
1. 반드시 #원본테이블 처럼, 대상이 되는 테이블이 먼저 존재해야 한다.
2. Transaction은 지원되지 않는다.
3. #원본테이블의 데이터를 제외한 필드명/타입/구조 등의 변경 사항은
#FEDERATED 된 테이블에 적용이 되지 않기 때문에,
수동으로 변경해 주어야 한다.
4. Query Cache는 이용할 수 없다.
5. !!!!! 중요 !!!!! SHOW CREATE TABLE #FEDERATED된 테이블;
입력시 #원본테이블로의 접속정보가 고스란히 노출 되므로, 주의가 요구된다.
'IT > DBMS 공통' 카테고리의 다른 글
[MySQL] 실행계획 (0) | 2020.01.31 |
---|---|
database convert latin1 to utf-8 (0) | 2014.09.15 |
Select 후 바로 Update Function (0) | 2014.03.18 |
옵티마이저 - 상세 (옵티마이저 목표의 선택, 실행계획의 고정화) (0) | 2014.03.11 |
옵티마이저 (0) | 2014.02.25 |