MySQL 데이터베이스 엔진 비교
Comparison of MySQL database engines이 글은 검증을 위해 인용구가 추가로 필요하다.– · · 책· · (2010년 3월)(이를 과 시기 |
이는 MySQL 데이터베이스 관리 시스템(DBMS)의 주목할 만한 데이터베이스 엔진과 비교한 것이다.데이터베이스 엔진(또는 "저장소 엔진")은 DBMS가 데이터베이스에서 CRUD(Create, 읽기, 업데이트 및 삭제하는 데 사용하는 기본 소프트웨어 구성 요소다.
| 이름 | 노점상 | 면허증 | 트랜잭션 | 개발중 | MySQL 버전 | 마리아DB 버전 |
|---|---|---|---|---|---|---|
| 기록 보관소 | 오라클 | GPL | 아니요. | 네 | 5.0 - 현재 | 5.1 - 현재 |
| 아리아 | 마리아DB | GPL | 아니요. | 네 | 없음 | 5.1 - 현재 |
| 버클리 DB | 오라클 | AGPLv3 | 네 | 아니요. | ? - 5.0 | 없음 |
| 블랙홀 | 오라클 | GPL | 아니요. | 네 | 5.0 - 현재 | 5.1 - 현재 |
| 연결 | 마리아DB | GPL | 아니요. | 네 | 없음 | 10.0 - 현재 |
| CSV | 오라클 | GPL | 아니요. | 네 | 5.0 - 현재 | 5.1 - 현재 |
| 매 | 오라클 | GPL | 네 | 아니요. | ? | 없음 |
| 연합 | 오라클 | GPL | ? | 아니요. | 5.0 - 현재 | ? |
| 페더레이트X | 마리아DB | GPL | 네 | 아니요. | 없음 | ? - 현재 |
| ColumnStore(이전의 InfiniDB) | 칼폰트 | GPL | 네 | 네 | 없음 | 10.5.4 - 현재 |
| 이노DB | 오라클 | GPL | 네 | 네 | 3.23 - 현재 | 5.1 - 현재 |
| 메모리 | 오라클 | GPL | 아니요. | 네 | 3.23 - 현재 | 5.1 - 현재 |
| 뫼롱가 | 그루가 프로젝트 | GPL | 아니요. | 네 | 없음 | 10.0 - 현재 |
| 마이샘 | 오라클 | GPL | 아니요. | 아니요. | 3.23 - 현재 | 5.1 - 현재 |
| 마이록스 | 페이스북 | GPLv2 | 네 | 네 | 없음 | 10.2 - 현재 |
| NDB | 오라클 | GPLv2 | 네 | 네 | ? | 없음 |
| 오크그래프 | 오라클 | GPLv2 | 아니요. | 아니요. | 없음 | 5.2 - 현재 |
| S3 | 마리아DB | GPL | 아니요. | 네 | 없음 | 10.5 - 현재 |
| 시퀀스 | 마리아DB | GPL | 아니요. | 네 | 없음 | 10.0 - 현재 |
| 스핑크스 | 스핑크스 테크놀로지스 주식회사 | GPL | 아니요. | 아니요. | 없음 | 5.2 - 현재 |
| 스파이더 | 시바 겐토쿠 | GPL | 네 | 네 | 없음 | 10.0 - 현재 |
| 온도 테이블 | 오라클 | GPL | 아니요. | 네 | 8.0 - 현재 | 없음 |
| 토쿠DB | 페르코나 | 수정된 GPL | 네 | 아니요. | 없음 | 5.5 - 현재 |
| XtraDB | 페르코나 | GPL | 네 | 네 | 없음 | 5.1 - 10.1 |
InnoDB와 MyISAM의 비교
- InnoDB는 로그를 재생하여 충돌 또는 기타 예기치 않은 종료로부터 복구한다.MyISAM은 업데이트되었지만 디스크로 완전히 플러시되지 않은 인덱스 또는 테이블을 완전히 검색 및 복구하거나 재구성해야 한다.InnoDB 접근방식은 데이터 파일 크기에 따라 MyISAM 시간이 증가하는 반면, InnoDB 접근방식은 대략 고정된 시간이기 때문에, 데이터베이스 크기가 커질수록 더 큰 가용성을 제공한다.
- innoDB는 innodb_flush_log_at_trx_commit이 1로 설정된 상태에서 각 트랜잭션 후 트랜잭션 로그를 플러시하여 신뢰성을 크게 향상시킨다.[1]MyISAM은 데이터 파일 손상에 대해 동일한 복원력을 제공하기 위해 데이터=저널이 탑재된 ext4와 같이 완전히 저널링된 파일 시스템 위에서 실행되어야 한다.(저널은 MyISAM 성능 향상을 위해 SSD 디바이스에 배치할 수 있으며, 마찬가지로 InnoDB 로그는 SSD에서 실행되는 ext2와 같은 비 저널 파일 시스템에 배치되어 유사한 성능 향상을 도모할 수 있다.어느 경우에도 신뢰성은 희생되지 않는다.)
- InnoDB는 신뢰성은 낮지만 경우에 따라 성능이 더 높은 모드로 실행될 수 있다.innodb_flush_log_at_trx_commit을 0으로 설정하면 통제가 호출자에게 반환되기 전에 트랜잭션이 디스크에 커밋되지 않는 모드로 전환된다.대신, 디스크 플러시는 타이머에서 일어난다.[1]
- InnoDB는 자동으로 여러 개의 동시 삽입물을 그룹화하여 동시에 디스크로 플러시한다.[2]MyISAM은 데이터 행 및 인덱스에 읽기를 캐싱하기 위해 파일 시스템 블록 캐시에 의존하며 InnoDB는 행 캐시를 인덱스 캐시와 결합하여 엔진 자체 내에서 이 작업을 수행한다.[3]
- InnoDB는 있는 경우 기본 키 순서로 행을 저장하며, 그렇지 않은 경우 첫 번째 고유 키 순서로 행을 저장한다.이 속도는 키가 일반적인 작동에 적합하도록 선택되는 경우 훨씬 더 빠를 수 있다.[citation needed]기본 키나 고유 키가 없는 경우 InnoDB는 내부적으로 생성된 고유 정수 키를 사용하고 MyISAM처럼 대략적으로 삽입 순서대로 레코드를 저장한다.또는 동일한 효과를 얻기 위해 자동 증가 기본 키 필드를 사용할 수 있다.
- InnoDB는 데이터와 인덱스를 모두 업데이트 가능한 LZW 압축 페이지 저장소를 제공한다.MyISAM 압축 테이블을 업데이트할 [4]수 없음
- 완전한 AIDS 호환 모드에서 작동할 경우 InnoDB는 여러 연결에서 인서트에 대한 플러시를 결합하지만 트랜잭션당 최소 한 번 이상 디스크에 플러시를 수행해야 한다.일반적인 하드 드라이브 또는 어레이의 경우 초당 약 200개의 업데이트 트랜잭션을 제한한다.높은 트랜잭션 속도를 요구하는 애플리케이션의 경우, 트랜잭션 무결성을 유지하기 위해 쓰기 캐싱과 배터리 백업을 갖춘 디스크 컨트롤러가 필요할 것이다.InnoDB는 또한 이러한 효과를 감소시키는 몇 가지 모드를 제공하며, 물론 MyISAM보다 더 높은 신뢰성을 유지하지만 트랜잭션 무결성 보장의 손실로 이어진다.MyISAM은 이러한 오버헤드가 없으며 단지 트랜잭션을 지원하지 않기 때문에만 이 오버헤드를 가지고 있다.
- MyISAM은 업데이트에 테이블 수준 잠금을 사용하고 기존 행에 삭제하며, 잠금을 걸어 빈 공간에 삽입하는 대신 새 행을 추가할 수 있는 옵션도 있다.InnoDB는 행 레벨 잠금을 사용한다.많은 행이 업데이트되는 대형 데이터베이스 응용프로그램의 경우, 단일 테이블 수준 잠금으로 데이터베이스의 동시성이 현저히 감소하기 때문에 행 수준 잠금이 중요하다.
- InnoDB와 MyISAM은 모두 전체 텍스트 검색을 지원하며, InnoDB는 MySQL 5.6.4에서 전체 텍스트 색인 지원을 받지만 결과는 확연히 다를 수 있다.[5][6]
참조
- ^ a b MySQL 5.5 참조 설명서 - InnoDB 시작 옵션 및 시스템 변수
- ^ "MySQL 5.5 Reference Manual - InnoDB Group Commit". Archived from the original on 2011-11-04. Retrieved 2011-10-08.
- ^ "MySQL 5.5 Reference Manual - The InnoDB Storage Engine". Retrieved 28 May 2015.
- ^ MySQL 5.5 참조 설명서 - Myisampack - 압축된 읽기 전용 MyISAM 테이블 생성
- ^ "Changes in MySQL 5.6.4 (2011-12-20, Milestone 7)". Oracle. December 12, 2011.
- ^ "InnoDB Full-text Search in MySQL 5.6: Part 2, The Queries!". MySQL Performance Blog. March 4, 2013.