레이블이 스토리지엔진인 게시물을 표시합니다. 모든 게시물 표시
레이블이 스토리지엔진인 게시물을 표시합니다. 모든 게시물 표시

2009년 2월 23일 월요일

MyISAM 파일구성

한개의 MyISAM테이블은 한개의 MYD파일과 한개의 MYI파일, 한개의 frm파일로 구성되어있다. 
파일명은 다음과 같다. 

  테이블명.확장자(MYD, MYI, frm)

이것은 데이터베이스를 나타내는 디렉토리 밑에 생성된다.  별도로 필요로 하는 파일은 없다. 

MYD파일은 데이터를 보존하고 MYI파일은 인덱스를 보존한다. 
frm은 테이블의 정의이다. 


MyISAM에 대해서

MyISAM스토리지엔진은 MySQL표준 스토리지엔진이다. 
사용자인증테이블등의 권한 테이블은 MyISAM형이어야만 한다. 

MyISAM테이블의 특징은 다음과 같다. 
  • 심플한 파일구성
  • 인덱스는 B-Tree
  • 트랜잭션은 해당없음
  • 외부키제약 없음
  • 락은 테이블락만  존재(LOCK TABLES문)
  • 압축가능
  • 심볼릭링크로 파일을 분산가능

2009년 2월 16일 월요일

MySQL5.1 스토리지엔진의 플러그인

MySQL 멀티스토리지엔진 아키텍쳐에 있어서 MySQL5.0까지는 새로운 스토리지엔진을 추가하기 위해서는 이용자가 MySQL소스를 수정해서 컴파일 할 필요가 있었다. 

그렇기 때문에 독자의 스토리지엔진을 추가 하는 것은 매우 어려운 작업이 된다. 

MySQL 5.1에서는 이 멀티스토리지엔진 아키텍쳐가 확장되어 모듈화가 진행되어지고 있다. 

MySQL 5.1에서는 새로운 스토리지를 동적으로 인스톨하거나 언인스톨하거나 하는 것이 가능하다. 

MySQL상위층(통신제어, 구문해석, 최적화등을 실행하는 부문)하고 스토리지엔진하고의 느슨한 결합(Loose coupling)이 진행되고 있다. 

MySQL 5.1에서는 새롭게 INSTALL PLUGIN하고 UNINSTALL PLUGIN라고 하는 SQL명령이 추가되었다. 
인스톨대상의 스토리지엔진은 사전에 공유 라이브러리로 해 놓을 필요가 있다. 

다음처럼 새로이 스토리지엔진을 로딩한다. 

INSTALL PLUGIN ha_example SONAME 'ha_example.so';

SONAME뒤의 값이 공유라이브러리 파일명이다.  파일은 plugin_dir로 지정한 디렉토리에 놓을 필요가 있다. 
기본 plugin_dir은 $base_dir/lib/mysql이다. 

또 다음과 같이 스토리지엔진을 언인스톨가능하다. 

UNINSTALL PLUGIN ha_example;






스토리지엔진의 또 다른 분류법

스토리지 엔진 차이에 따른 특징은 앞에서 이야기한 메모리기반/디스크기반 하고 트랜잭션 기능의 유무 이외에 다음과 같은 것이 있다. 

  • 대응하고 있는 Lock레벨
  • 대응하고 있는 인덱스의 종류
  • 참조정합성
  • 대응하고 있는 데이터형
  • 테이블정의에 관한 상한값등의 제한
예를 들면  대응하고 있는 인덱스의 종류로서는 다음과 같은 차이가 있다. 

InnoDB:BTREE
MEMORY:BTREE, HASH
MyISAM:BTREE, FULLTEXT, GIS

이처럼 엔진에 따라서 완전히 기능의 유무가 나누어져있는 것만아니라 서포트하는 범위가 다른 것도 있다. 
이 부분의 차이는 꽤 자세한 이야기가 됨으로  레퍼런스 매뉴얼을 참조하길 바란다. 

이 처럼 복수의 스토리지엔진을 준비하고 있는 MySQL이지만  MySQL에서는 모든 스토리지엔진은  Handler API라고 하는 공통 인터페이스가 있다. 

이것에 따라서 테이블마다 다른 스토리지엔진을 쓴다고 하지만  JOIN이나 UNION등의 테이블간의 처리를 실행하는 것도  가능하다. 

또 난이도가 올라가는 이야기이지만  사용자도 Handler API를 사용할 줄 만 안다면 독자의 스토리지 엔진을 MySQL에 붙이는 것도 가능하다. 
실제로 이런 구성을 이용한 OEM제품등도 존재한다. 

최근 화제가 되고 있는 OEM제품으로 Solid Information Technology사의 solidDB등이 있다. 




2009년 2월 11일 수요일

스토리지엔진의 종류, 분류

MySQL에서는 다수의 스토리지 엔진이 준비되어있지만 크게는 다음과 같이 분류할 수 있다. 

MySQL의 스토리지 엔진의 종류
                              
 디스크기준
    트랙잭션: InnoDB, BDB, Falcon
    비트랙잭션: MyISAM, MERGE, Archive, CSV
 메모리기준
     트랜잭션: NDBCluster
      비트랜잭션: MEMORY(HEAP)