일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로콘
- DP
- GitHub Desktop
- 프로그래머스
- baekjoon
- Github
- programmers
- 리트코드
- 알고리즘
- Pro-Con
- 네이버 검색 시스템
- 백준
- SRE
- 취준
- LeetCode
- Ultimate Search
- 격리수준
- ASF-110
- 자소서
- 코딩테스트
- 백트래킹
- C++
- Python
- 프로콘 갈림현상
- python3
- 제노블레이드 2
- algorithm
- 알고리즘 종류 정리
- git
- Algorithmus
- Today
- Total
산타는 없다
MySql의 스토리지 엔진 비교 본문
MySql은 서버 엔진과 스토리지 엔진으로 구성되어 있습니다.
서버 엔진(SQL Interface, Parser, Optimizer, Cache & Buffer)
- 클라이언트의 요청을 받아 SQL을 처리하는 DB자체의 기능적인 역할을 수행
- DB가 SQL을 이해할 수 있도록 쿼리를 파싱하고 메모리, 물리적 저장장치와 통신하는 기능을 수행
- 디스크와 직접적인 접근을 제외한 대부분의 역할 수행
스토리지 엔진
- 서버 엔진이 필요한 데이터를 물리적 장치에서 가지고 오는 역할을 수행
- 물리적 저장장치에서 데이터를 읽어오는 역할을 수행하고 플러그인 형식으로 여러 스토리지 엔진을 필요에 따라 추가 삭제 할 수 있다
MySql은 다양한 스토리지 엔진을 지원합니다. MyISAM, InnoDB, Archive, Memory, NDB, Feder-ated 등 기본 엔진 뿐만 아니라 서드 파티 스토리지 엔진도 간단하게 플러그인 형식으로 설치를 할 수 있습니다.
그 중 보편적으로 사용되는 MyISAM, InnoDB, Archive를 비교해보겠습니다.
스토리지 엔진 비교표
MyISAM | InnoDB | Archive | |
스토리지 제한 | 256TB | 64TB | None |
트랜잭션 | No | Yes | No |
Locking 레벨 | Table | Row | Row |
인덱스 | B Tree | B+Tree | No |
Cache | Index | Data / Index | No |
파티셔닝 | Yes | Yes | Yes |
Cluster Index | No | Yes | No |
Foreign Key | No | Yes | No |
비고 | 백그라운드 로그 수집 | OLTP | 원시 로그 수집 |
※ OLTP : Online Transaction Processing / 온라인 트랜잭션 처리로 네트워크 상의 여러 이용자가 실시간으로 데이터베이스의 데이터를 갱신하거나 조회하는 등의 단위 작업을 처리하는 방식을 말한다.
MyISAM
- 인덱스만 메모리에 올려서 테이블 잠금으로 데이터를 처리하는 스토리지 엔진으로 단순 백그라운드에서 로그 수집에 적합
- Table 단위로 Locking이 걸리기 때문에 동시 다발적으로 데이터 변경 작업을 수행하는 로직에서는 절대 적합하지 안습니다.
- 특히 인덱스가 걸려있는 상태에서 대용량(500만 건 이상) 데이터 처리 시 단순 입력 상태에서도 테이블 잠금이 빈번하게 발생할 수 있습니다.
InnoDB
- In-Memory 특성을 가지고 있습니다. 메모리에 인덱스/데이터 모두 올려서 데이터를 처리하기 때문에 데이터 접근 속도가 상당히 빠릅니다. 때문에 메모리가 많이 허용되면 뛰어난 퍼포먼스를 보여줍니다.
- 트랜잭션을 제공하고, 동시 데이터 처리 시에도 행(Row) 단위 잠금으로 처리하기 때문에 OLTP성 대용량 처리에 적합한 스토리지 엔진입니다.
Archive
- 원시 로그 수집에 최적인 스토리지 엔진입니다.
- 트랜잭션, 인덱스 모두 지원하지 않지만, Locking이 행 단위 잠금으로 수행하기 때문에 동시 다발적인 데이터 입력 상황에도 상당히 좋은 퍼포먼스를 제공합니다.
- 메모리에서 데이터 압축을 수행하면서 실제적으로 디스크에 기록하기 때문에, InnoDB 대비 디스크 용량 효율이 좋습니다.
MyISAM vs InnoDB
MyISAM은 InnoDB에 비하여 데이터 모델 디자인이 단순합니다. 때문에 전체적인 속도가 InnoDB보다 빠릅니다. 특히 Select 작업 속도가 빠르므로 읽기 작업에 적합합니다. 또 항상 테이블에 ROW COUNT를 가지고 있기 때문에 Select count(*) 명령 수행이 빠릅니다.
MyISAM은 풀텍스트 인덱스를 지원하는데 이는 InnoDB에선 지원하지 않습니다.
풀텍스트 인덱스는 검색 엔진과 유사한 방법으로 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장합니다.
하지만 MyISAM은 Locking 단위가 Table이기 때문에 동시에 처리되는 작업일 경우에 InnoDB 대비 느리며 트랜잭션을 지원하지 않는 단점이 있습니다.
이러한 특성 때문에 MyISAM은
- 읽기 위주의 작업만 필요한 경우
- 전문 검색이 필요한 경우
- 트랜잭션이나 복구등이 필요 없을 경우
- 한번에 대량의 데이터를 입력하는 배치성 테이블
일 경우 유리합니다.
반대로 InnoDB는 MyISAM보다 Select 수행속도는 느려도 Locking 단위가 Row이기 때문에 동시 처리 작업에서 유리하고 트랜잭션을 지원하여 관리에 용이합니다. 또 MyISAM는 인덱스에서 B tree 자료구조를 지원하는 반면에 InnoDB는 B+Tree를 지원하기 때문에 Order by 연산에서 빠른 수행속도를 보여줍니다.
이러한 특성 때문에 InnoDB는
- 대용량의 데이터를 컨트롤 하는 경우
- 트랜잭션 관리가 필요한 경우
- 복구가 필요한 경우
- 정렬등의 구문이 들어가는 경우
- 동시 처리가 수행되는 경우
유리합니다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
[MySql] SQL select Query 실행 순서 (0) | 2021.07.14 |
---|---|
데이터베이스 B/B+ tree 인덱스 구조 (0) | 2021.05.17 |
데이터베이스의 인덱스 알고리즘 (0) | 2021.05.14 |
MySql의 인덱스 자료구조 (0) | 2021.05.13 |
트랜잭션(Transaction) 격리 수준(Isolation Level) (0) | 2021.04.27 |