[DB] 스토리지 엔진

iamhyunji·2022년 5월 24일
0
post-thumbnail

🔍 들어가기 전에


애플리케이션을 만들 때 중요한 것들이 굉장히 많다.
데이터는 얼마나 들어올지 고려해야 하고, 어느 정도 속도로 들어올지, 어떻게 접근하고, 저장할지, 조회할 때에는 어떤 식으로 조회해야 가장 빠른지 등등..

고려해야 할 부분들은 정말 많지만 그 중에서도 데이터를 조작하는데 있어 기본이 되는 스토리지 엔진에 대해 알아보고자 한다.

📌 스토리지 엔진


  • 데이터베이스 엔진(database engine) 또는 스토리지 엔진(storage engine)
  • 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제(CRUD 참조)하는 데 사용하는 기본 소프트웨어 컴포넌트 또는 모듈
  • 종종 데이터베이스 서버 또는 데이터베이스 관리 시스템이라는 용어와 서로 바꾸어 사용되기도 함
  • 현대의 많은 DBMS가 동일한 DB 내에 다중 저장 엔진을 지원
  • 이용 방법 2가지
    • DBMS 고유의 사용자 인터페이스를 이용하는 방법
    • 포트 번호 이용하는 방법
  • MySQL의 엔진 구분 2가지
    • 트랜잭션
    • 비트랜잭션

데이터를 처리(삽입, 조회, 수정, 삭제)하는 역할을 하는 모듈을 스토리지 엔진이라 한다.

📌 종류 in MySQL


InnoDB

  • MySQL 5.5 이후 기본 엔진
  • 많이 사용되는 엔진
  • 트랜잭션 지원
  • ACID 지킴
  • 행 레벨의 잠금 지원
  • 충돌 복구 지원
  • multi-version concurrency 제어 지원
  • 외래키 참조 무결성 제약 제공하는 유일한 엔진
  • 특수 케이스 아니라면 오라클은 해당 엔진 사용하기를 권장

MyISAM

  • version 5.5 이전에서 기본
  • 원조 스토리지 엔진
  • 빠른 속도 ❓ 뭐에 빠르다는거지?
  • 트랜잭션 지원 X
  • 테이블 수준의 잠금 지원
  • 웹과 웨어하우싱에 주로 사용

Memory

  • 메모리에 테이블을 생성함
  • 가장 빠른 엔진
  • 트랜잭션 지원 X
  • 테이블 수준의 잠금 지원
  • 임시테이블이나 quick-lookup에 이상적인 엔진
  • 데이터베이스 재시작 시, 데이터 사라짐

CSV

  • 데이터를 csv 파일에 저장
  • 다른 애플리케이션에 쉽게 통합될 수 있어 굉장히 유연함

Merge

  • MyISAM 테이블의 기반으로 동작
  • 큰 사이즈의 데이터를 쉽게 관리하는데 용이함
  • 동일한 MyISAM 테이블을 그룹화하고, 해당 테이블들을 하나의 객체로 참조함 ❓이게 무슨 얘기?
  • 참조가 적으면서 데이터 웨어하우싱 환경에 좋음
    Archive
  • 빠른 속도로 삽입하는데 최적화되었음
  • 데이터 삽입 시 데이터를 압축
  • 트랜잭션 미지원
  • 참조가 드문 많은 양의 데이터를 저장하고 반환하는 데에 이상적

Federated

  • 하나의 논리적 데이터베이스를 생성하는 서버를 물리적 서버로부터 분리하는 기능을 제공
  • 로컬 서버의 쿼리는 원격 테이블에서 실행됨
  • 로컬 테이블에 데이터 저장 안 됨
  • 분산 환경에서 유용

Blackhole

  • 수용적이나 데이터를 저장하진 않음
  • 비어있는 set을 반환
  • 데이터가 자동으로 복제되지만 로컬에는 저장되지 않는 분산 데이터베이스 환경에서 사용

Example

  • efficiently manage data files, the data, and the index caches.

💡 ACID ?

  • A(atomicity)
  • C(consistency)
  • I(isolation)
  • D(durability)
  • closely tied to the notion of a transaction

💡 row-level-locking vs table-level-locking

  • lock that prevents any other transaction from accessing a table. InnoDB makes considerable effort to make such locks unnecessary, by using techniques such as online DDL, row locks and consistent reads for processing DML statements and queries.

💡 외래키 참조 무결성 제약 ?

  • 정의
  • 지키면 좋은 점

💡 웨어하우싱(warehousing) ?

  • 정의

엔진 관련 쿼리


# 엔지 확인 1
SHOW ENGINES;
# 엔지 확인 2
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = 'database';

위 명령어를 통해 서버에서 지원하는 모든 엔진응 확인할 수 있다.

# 엔진 설정
CREATE TABLE Cars(
Id INTEGER PRIMARY KEY
, Name VARCHAR(50), 
    -> Cost INTEGER) ENGINE='MyISAM';
* 테이블 생성 시 엔진 설정 가능
* ENGINE 키워드 통해 테리블 마다 엔진 설정 가능
* 다른 엔진으로도 변경 가능
  * ALTER TABLE Cars ENGINE='MyISAM';
  
# 엔진 변경
ALTER TABLE myTable ENGINE = InnoDB;

📌 동작 방법



❓데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제(CRUD 참조)하는 데 사용하는 기본 소프트웨어 컴포넌트라고 하는데 어떻게 사용하며, 어떤 식으로 구성된 모양이지?

올바른 엔진 선택 방법


  • 만병통치약은 없음
  • 모든 환경에 이상적인 엔진은 없다

🔗 출처•참고


profile
Lv0. 웹 개발 (❤️❤️❤️🤍)

0개의 댓글