DB 스토리지 엔진 별 차이

유수민·2022년 7월 11일
1

지식창고

목록 보기
19/64

📌스토리지 엔진이란? (= 데이터베이스 엔진)

서버 엔진이 필요한 물리적인 데이터를 가져오는 장치를 말한다.
데이터베이스 관리 시스템 (DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제(CRUD 참조)하는 데 사용하는 기본 소프트웨어 컴포넌트이다.
Mysql에서 테이블을 생성하면 실제로 서버상에는. frm이라는 파일을 생성한다. 이 파일에 접근하는 속성을 설정하는 것이 바로 스토리지 엔진이다.
현대의 많은 DBMS가 동일한 DB 내에 다중 저장 엔진을 지원한다. (ex) MySQL은 MyISAM 뿐만 아니라 InnoDB도 지원한다.) 저장 엔진은 동일 DB내의 테이블마다 다르게 지정이 가능하다.

출저 ) https://velog.io/@jinh2352/Storage-Engine

📖스토리지 엔진의 역할

스토리지 엔진은 다음과 같은 역할을 하는 컴포넌트로 구성된다.

  • 트랜잭션(transaction manager): 트랜잭션을 스케줄링하고 데이터베이스 상태의 논리적 일관성 보장.

  • 잠금 매니저(lock manager): 트랜잭션에서 접근하는 데이터베이스 객체에 대한 잠금을 제어. 동시 수행 작업이 물리적 데이터 무결성을 침해하지 않도록 함.
    => 트랜잭션과 잠금 매니저는 동시성 제어. 논리적 물리적 데이터 무결성을 보장하고, 동시 수행 작업의 효율적 수행을 담당.

  • 엑세스 메서드(access method): 디스크에 저장된 데이터에 대한 접근 및 저장 방식을 정의. 힙 파일/B-트리/LSM 트리 등의 자료구조 사용.

  • 버퍼 매니저(buffer manager): 데이터 페이지를 메모리에 캐시.

  • 복구 매니저(recovery manager): 로그를 유지 관리하고 장애 발생 시 시스템을 복구.

📖스토리지 엔진의 종류

📚1. MyISAM

정적인 데이터를 저장하고 자주 읽기 작업이 일어나는 테이블에 적합

  • MySQL의 기본 스토리지 엔진

  • 구조가 단순해, 속도가 빠르다.

  • 데이터 저장에 실제적인 제한이 없고 매우 효율적으로 저장한다. 
    → 메모리 효율이 InnoDB보다 좋음

  • 테이블 작업시 특정 행을 수정하려고 하면 테이블 전체에 락이 걸려서  다른사람이 작업 할 수 없다. (Table-level Lock)
    → 갱신이 많은 용도로는 성능적으로 불리. 동시 서비스에 적합X
    → multi-thread 환경에서는 성능이 저하될 수 있다.

  • 트랜잭션에 대한 지원이 없기때문에 작업도중 문제가 생겨도 이미 db안으로 데이터가 들어감. DB 프로세스가 비정상 종료하면 테이블이 파손될 가능성이 높다. → 데이터 무결성이 보장되지 않는다.

  • Full-text 검색이 가능하다

  • 주로 select 작업이 많은 경우에 사용된다. 즉, 읽기(READ)작업에 효과적이다.

📚2. InnoDB

데이터 입력 및 수정이 빈번한 높은 퍼포먼스를 요구하고 다중 사용자, 동시성이 높은 OLTP 애플리케이션에 적합
('OLTP'는 여러 사용자가 실시간으로 DB Data를 갱신, 조회하는 단위 작업 처리하는 방식이다.)

  • MariaDB의 기본 스토리지 엔진

  • MyISAM보다 데이터 저장비율이 낮고, 데이터 로드 속도가 느리다.

  • 레코드 기반의 락(Lock)을 제공한다. 즉, 테이블 레벨이 아닌 ROW 레벨의  락을 지원한다. 이로 인해 높은 동시성 처리가 가능한 특징이 있고 안정적이다. (Row - level Lock)
    →  insert,update,delete에 대한 속도가 빠르다

  • 외부키를 지원한다

  • 자동 데드락 감지 : 감지 시 변경된 레코드가 가장 작은 트랜잭션을 롤백해버려서 데드락을 풀어준다.

  • 자동 장애 복구 : 완료하지 못한 트랜잭션이나 일부만 기록되어 손상된 데이터 페이지 등을 자동 복구한다.

  • 데이터 무결성 보장(트랜잭션, 외래키, 제약조건, 동시성 등) - ACID

  • Primary Key를 기준으로 Clustering되어서 저장된다. 즉, PK를 기준으로 순서대로 디스크에 저장되는 구조로 PK에 의한 Range Scan이 빠르다.
    → 데이터를 PK순서에 맞게 저장한다는 뜻이므로 order by 등 쿼리에 유리할 수 있다.

  • 인덱스와 더불어 데이터까지 버퍼풀에 저장하기 때문에 모든 데이터가 메모리에 있으면 디스크를 읽지 않아도 된다.
    → 데이터 접근 속도가 빠르다
    → 인덱스와 데이터 모두 메모리에 적재되므로 메모리 사용 효율에 좋지 않다.
    → 메모리 때문에 로그 수집에 대한 용도로 InnoDB를 사용하면 안된다.

💡
Index memory caching

특정 데이터와 인덱스에 대해서 메모리 캐쉬를 지원한다.
서버에서 프로그래머가 캐시에 저장해 둘 요청을 설정하면, 그에 대해서 캐시에 저장해두고 해당 요청과 데이터에 대해 변경이 있을때 까지, 해당 요청에 대해서는 서버까지 통신하지 않고 캐시를 우선으로 조회하게 된다. 즉, 데이터베이스에 중복되는 요청을 하는 경우 메모리 캐쉬를 이용한다.

Data 압축

MySQL 서버에서 디스크에 저장된 데이터 파일의 크기는

  1. 쿼리의 처리 성능
  2. 백업 및 복구 시간
  3. 저장 비용

과 밀접하게 연결된다. 이러한 문제를 해결하기 위해 Data 압축을 사용한다.
MySQL 서버는 디스크에 저장하는 시점에 데이터 페이지가 압축되어 저장되고, 디스크에서 데이터 페이지를 읽어올 때 압축이 해제되는 방식이다. 버퍼 풀에 데이터 페이지가 한 번 적재되면, InnoDB 스토리지 엔진은 압축이 해제된 상태로만 데이터 페이지를 관리하고 MyISAM 는 압축형식을 취한다.

📚3. Archive

로그 수집에 적합한 엔진

  • 자동적으로 데이터 압축을 지원하며 다른 엔진에 비해 80% 저장공간 절약 효과를 자랑한다.
  • 데이터가 메모리상에서 압축되고 압축된 상태로 디스크에 저장되기 때문에 row-level locking이 가능하다.
  • 가장 빠른 데이터 로드 속도 또한 자랑하지만, INSERT와 SELECT만이 가능하다.
  • 트랜잭션은 지원하지 않는다

📚4. Cluster (NDB)

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

📚5. Federated

  • 물리적 데이터베이스에 대한 논리적 데이터베이스를 생성하여 원격 데이터를 컨트롤 할 수 있다.
  • 실행속도는 네트워크 요소에 따라 좌우되고 테이블 정의를 통한 SSL 보안 처리를 한다.
  • 분산 데이터베이스 환경에 사용한다
profile
배우는 것이 즐겁다!

0개의 댓글