2009년 2월 5일 목요일

멀티 스토리지 엔진 (Multi Storage Engine)

MySQL을 다른 RDBMS하고 비교해보면 가장 큰 특징이라고 말 할 수 있는 것이 멀티스토리지 엔진 아키텍쳐이다. 

스토리지엔진은 MySQL을 구성하는 기본적인 프로그램의 한개이다. 
스토리지엔진은 데이터, 인덱스 파일에 액세스하거나 그것을 메모리에 캐쉬하면서 데이터의 검색이나 저장을 실제로 수행하는 처리를 담당하는 프로그램이다. 

이와같이 MySQL을 구성하는 다른 중요한 프로그램으로 SQL명령 문자열을 구문해석하는 SQL파서, 최적화, 실행계획을 수행하는 옵티마이저가 있다. 

예를 들어 클라이언트에서 무언가 처리를 하기 위해 SQL명령를 발행한다고 치자.
이 때 MySQL서버는  우선 최초로  그  SQL명령를 TCP/IP등의 네트워크 기능을 통해 패킷을 
수신하고  그곳에서 SQL명령 문자열을 추출한다. 
다음에 수신한 SQL명령을 구문 해석한다. 
이 부분은 SQL파서가 처리를 담당한다. 
SQL파서가 처리함으로써  그 이후에는 문자열이 아니라 보다 프로그램적인 , 처리하기 쉬운 형태로 명령어 정보가 건네지게 된다. 

옵티마이져가 SQL가 SQL문의 최적화와 인덱스등을 사용한 실행계획을 작성한다. 
이로 인해 실제로 테이블에 대한 처리를 최소화하게된다. 
최후에는 그 실행계획을 기반으로  테이블과 인덱스에 실제 액세스하게 된다. 

이 때, 테이블과 인덱스에대한  실제 액세스를  스토리지엔진이  맡고 있다. 
MySQL에서는 복수의 스토리지엔진이 준비되어있어서  이용자는 테이블을 작성할 때 「테이블 단위」로 스토리지 엔진을 선택하는 것이 가능하다.  이러한 구조를 「멀티스토리지 엔진 아키텍쳐」라고 부른다. 

이처럼 MySQL에서는 멀티스토리지 엔진 아키텍쳐가 채용된 이유로  기술적인 이야기 안에는  「스토리지 엔진」이라는 용어가 빈번하게 등장한다. 
MySQL이외의 주요한 RDBMS에서는 멀티스토리지엔진 아키텍쳐를 채용하지 않고 있기 때문에 스토리지 엔진에 대해 특별히 주목되거나 하는 것은 없지만 RDBMS의 일반적인 구조를 생각해보면  스토리지 엔진 그것은 어느 RDBMS나 존재하는 것이다.