🥞 BE
home

11. 데이터베이스 엔진

Library that takes care of the on disk storage and CRUD
데이터베이스 엔진은 데이터베이스의 성능, 기능, 안정성 등에 직접적인 영향을 미친다.
나의 사용목적, 용도에 맞게 데이터베이스 엔진을 선택하고 데이터베이스를 그 위에 작성하기만 하면 된다.

MyISAM

ISAM (Indexed Sequential Access Method)

특징

B-Tree - MyISAM은 인덱스가 포인터가 되어 각 행을 가리킨다.
트랜잭션을 지원하지 않으며, ACID(원자성, 일관성, 고립성, 지속성) 특성을 제공하지 않음
Open Source & Owned by Oracle
삽입은 빠르지만, 수정 및 삭제에는 문제가 있음. → 모든 인덱스를 업데이트해야하기 때문. (offset 문제)
데이터베이스가 용량이 많은 삽입이나 업데이트를 하다가 충돌이 나면, 테이블이 손상됨. 데이터를 복구하지 않으면 접근할 수 없음. (have to manually repair)
테이블 수준 잠금 (Table-Level Locking) → 테이블에서 하나의 행이 변경될 때 전체 테이블이 잠기므로 동시 쓰기 작업에서 병목 현상이 발생가능.
빠른 읽기 성능 (Fast Read Performance)
파생된 다양한 DB로 확장 가능.

InnoDB

특징

B+Tree - InnoDB는 항상 PK가 있으나, MyISAM은 그렇지 않다. MyISAM에서는 기본키가 유니크 인덱스이다.
Default for MySQL & MariaDB
ACID 트랜잭션, 외래 키 지원 등을 모두 제공함.
행 수준 잠금 (Row-Level Locking) → 여러 트랜잭션이 동일한 테이블에서 동시에 작업가능.
Owned by Oracle → XtraDB로 fork

SQLite

특징

Very popluate embedded database for local data - 내장형 로컬 데이터베이스
B-Tree 기반
Postgres-like syntax
Full ACID & table locking
동시 읽기 및 쓰기 가능 → but 높은 동시성을 지원하지는 않음.
대규모 DB나 고성능 환경에는 적합하지 않음.

LevelDB

특징

LSM 기반 (많은 삽입과 SSD를 위해 좋음) → B-Tree의 경우 트리의 균형을 위해 파일을 이동시키며 디스크의 기존 비트를 변경시킬 수 있다. 이는 SSD와 맞지 않다.
SSD의 경우, 변경에 대해서는 변경제한으로 인해 드라이브의 수명을 저하시킨다. 때문에 삭제나 수정을 자주하는 작업이 필요한 경우 적절한 모델을 선정해야한다.
트랜잭션 X
파일에 레벨이 존재함
Memtable
Level 0 (young level)
Level 1 - 6
로그선행기입(WAL)을 지원함.
비트코인, AutoCAD, Minecraft에서 사용함.

RocksDB

특징

트랜잭션 지원, ACID작업 가능. 근데 B-Tree가 아님 ㄷㄷ
읽기 쓰기 빠르기에 성능 뛰어남.
멀티스레딩 압축을 지원. LevelDB가 단일 스레드였기에, RocksDB에서는 멀티 스레드로 만듦.
MyRocks for MySQL, MariaDB, Percona 가능.
MongoRocks for MongoDB 가능.