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 가능.