🔍 들어가기 전에
애플리케이션을 만들 때 중요한 것들이 굉장히 많다.
데이터는 얼마나 들어올지 고려해야 하고, 어느 정도 속도로 들어올지, 어떻게 접근하고, 저장할지, 조회할 때에는 어떤 식으로 조회해야 가장 빠른지 등등..
고려해야 할 부분들은 정말 많지만 그 중에서도 데이터를 조작하는데 있어 기본이 되는 스토리지 엔진에 대해 알아보고자 한다.
📌 스토리지 엔진
- 데이터베이스 엔진(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) ?
엔진 관련 쿼리
SHOW ENGINES;
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 참조)하는 데 사용하는 기본 소프트웨어 컴포넌트라고 하는데 어떻게 사용하며, 어떤 식으로 구성된 모양이지?
올바른 엔진 선택 방법
- 만병통치약은 없음
- 모든 환경에 이상적인 엔진은 없다
🔗 출처•참고