FIF's 코딩팩토리

데이터베이스 엔진이란? 본문

Database(데이터 베이스)

데이터베이스 엔진이란?

FIF 2019. 5. 27. 11:01
반응형

 

데이터베이스 엔진(Database Engine) 또는 스토리지 엔진(Storage Engine)은 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제하는데 사용하는 기본 소프트웨어 컴포넌트이다.

 

데이터베이스 엔진을 조작할 때 DBMS 고유의 사용자 인터페이스를 이용하는 방법과 포트 번호를 통해 하는 방법이 있다.

대부분의 데이터베이스 관리시스템은 DBMS의 사용자 인터페이스를 통하지 않고, 사용자가 내장된 엔진과 상호작용을 할 수 있는 자신만의 애플리케이션 프로그래밍 인터페이스(API)를 포함하고 있다.

데이터베이스 엔진 이라는 용어는 종종 데이터베이스 서버 또는 데이터베이스 관리 시스템이라는 용어와 서로 바꾸어 사용된다.

현대의 많은 DBMS가 동일한 DB 내에 다중 저장 엔진을 지원한다. 예를 들어, MySQL은 MyISAM 뿐만 아니라 InnoDB도 지원한다.

 

MySQL DB의 "스토리지엔진" 이란?


스토리지엔진은 DB에서 데이터를 어떠한 방식으로 저장하고 접근할 것인지에 대한 기능을 제공한다. 
스토리지엔진의 특성에 따라 데이터 접근이 얼마나 빠른지, 얼마나 안정적인지, 트랜잭션 등의 기능을 제공하는지 등의 차이점이 발생한다.

 


1. MyISAM

MySQL의 기본 스토리지 엔지으로 데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다. Full-Text 인덱스를 지원하며 특정 인덱스에 대해 메모리 캐쉬를 지원한다. 트랜잭션은 미지원/ 테이블 레벨의 락을 지원 잦은 변경및 삭제에는 좋은 성능이 나오지 못하나 데드락 발생은 예방가능 
데이블작업시 특정행을 수정하려고 하면 테이블 전체에 락이 걸려서 다른사람이 작업할수없다. 
간단하게 말하면 작업시에 Table-level Lock이 걸리게 된다. 
트랜잭션에 대한 지원이 없기때문에 작업도중 문제가 생겨도 이미 db안으로 데이터가 들어감 
주로 select 작업이 많은 경우에 사용된다. 

2. InnoDB
ACID 트랜잭션을 지원하며, MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다. 

특정 데이터와 인덱스에 대해서 메모리 캐쉬를 지원하며 외부티를 지원한다. 

데이터 압축이 불가능하고 자동 에러 복구 기능이 있다.

 테이블 레벨이 아닌 ROW 레벨의 락을 지원한다. 
테이블작업시 작업 시작하면 해당 열만 잠기게 되며 나머지 부분은 다른사용자가 수정 가능 하다.
간단하게 말하면 작업시에 Row-level Lock이 걸리게 된다. 
row-level 이다보니까 insert,update,delete에 대한 속도가 빠르다 .
주로 데이터 입력 및 수정이 빈번한 높은 퍼포먼스를 요구하는 대용량 사이트에서 적합하다.

3. Cluster (NDB) 
트랜잭션을 지원하고 모든 데이터와 인덱스가 메모리에 존재하여 매우 빠른 데이터 로드 속도를 자랑하며 PK 사용시 최상의 속도를 나타낸다. 

4. Archive 
MySQL 5.0부터 새롭게 도입된 엔진으로 자동적으로 데이터 압축을 지원하며 다른 엔진에 비해 80% 저장공간 절약 효과를 자랑한다. 그리고 가장 빠른 데이터 로드 속도 또한 자랑하지만, INSERT와 SELECT만이 가능하다. 

5. Federated 
MySQL 5.0부터 새롭게 도입된 엔진으로 물리적 데이터베이스에 대한 논리적 데이터베이스를 생성하여 원격 데이터를 컨트롤 할 수 있다. 실행속도는 네트워크 요소에 따라 좌우되면 테이블 정의를 통한 SSL 보안 처리를 한다. 분산 데이터베이스 환경에 사용한다 


 

 

MyISAM 심화 정리

  •         MySQL 5.5 이전까지 기본 스토리지 엔진이다.
  •         Data 저장에 실제적인 제한이 없다.(논리적-물리적 제한은 있음)
  •         Data를 매우 효율적으로 저장한다.
  •         빈번한 data 사용시 효과적이다.(select문)
  •         블로그나 게시판처럼 한사람이 글을 쓰면 다른 많은 사람이 글을 읽는 방식에 최적의 성능을 발휘한다.
  •         index는 B-Tree, R-tree, Full-text Index를 지원한다.
  •         특정 Index에 대한 Memory Cache를 지원한다.
  •         data 압축에 대한 옵션을 제공한다.
  •         지리적 Data를 지원한다.
  •         table 단위의 lock을 제공한다.
  •         non-transactional-safe : transaction을 제공하지 않는다.
  •         backup 및 특정 시점으로 복구를 지원한다.
  •         .frm : table 구조 정보(스키마 정보), .myd : data, .myl : index 정보
  •         index만 MySQL서버가 관리하고, data는 관리하지 않는다.(data는 OS캐싱에 의존한다.)
  •         적합한 사용처
  •         트레픽이 많은 웹사이트
  •         Data ware house
  •         정적인 table, 로그 table
  •         쓰기작업이 별로 없는 select 위주의 table.
  •         current insert기능이 read시에 insert가 가능하게 하므로 로그 table에 사용될 수 있다.

 

 

 

InnoDB 심화정리

  •         MySQL 5.5 부터 기본 스토리지 엔진이다.
  •         transactional-safe : ACID Transaction 지원한다. space당 64TB Data의 저장을 지원힌다.
  •         MyISAM보다 data 저장 비율이 낮다.
  •         MyISAM에 비해 약1.5~2.5배 정도의 큰 파일 사용한다.
  •         MVCC/Snapshot read를 지원한다.
  •         다른 Engine들에 비해 data 로딩 속도가 느리다.
  •         index는 B-Tree, Clustered를 지원한다.
  •         특정 data와 index에 대한 Memory Cache를 지원한다.
  •         외부키(foreign key)를 지원한다.
  •         data 압축 옵션을 제공하지 않는다.
  •         row 단위 lock을 제공한다.
  •         자동 에러 복구 기능을 지원한다.
  •         backup 및 특정 시점으로 복구를 지원한다.
  •         index와 data를 table space개념을 사용하여 저장한다.
  •         Online Transaction을 지원하는 Application
  •         민감한 정보를 갖는 table(회원table, 돈에 관련된 table)
  •         갱신(읽기/쓰기) 위주의 트랜잭션이 요구되는 table.
  •         index가 많이 걸린 대량의 table.





 

 

반응형
Comments