DATABASE/MySQL

데이터베이스 엔진(MyISAM, InnoDB)

Sunwoo_bang 2021. 1. 19. 23:23

여러분은 스토리지 엔진으로 뭘 사용해? 음? 스토리지 엔진이 뭔지도 모르겠다구?
어키 그럼 지금부터 살펴보자!

 

[스토리지 엔진]

 스토리지 엔진은 데이터를 디스크 스토리지에 저장하거나 데이터를 디스크에서 읽어오는 일을 담당하는 녀석이야.

스토리지 엔진 이라고도 불리우지.

 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트 및 삭제하는데 사용하는 

기본 소프트웨어 *컴포넌트라고 할 수도 있대.

 

                                                                                                        * 컴포넌트: 독립적인 소프트웨어 모듈

 

MySQL의 다른 복잡한 부분 말고 스토리지 엔진만 보자!


 MySQL을 예를 들어보자면 엔진은 하나이지만 스토리지 엔진은 동시에 여러개를 사용할 수 있고
테이블이 사용할 스토리지 엔진을 지정하여 해당 테이블의 읽기/쓰기 동작을 정의한 스토리지 엔진으로 처리할 수 있지.
 
스토리지 엔진엔 많은 종류가 있는데 그중 MyISAM과 InnoDB를 비교해볼거야!

 


[MyISAM]

 MyISAM은 테이블에 대한 ROW COUNT를 갖고 있어. 그래서 SELECT같은 조회에 유리하지.
그리고 풀텍스트 인덱스를 지원해. 이는 자연언어를 이용해 검색가능하게 해준대.
테이블과 인덱스를 각각 분리된 파일로 관리하지.

 단점이라고 한다면 트랜젝션 사용에서 문제가 될만한 점이 있는데, 
  row level locking지원하지 않아서 select insert update delete시 해당 Table 전체에 록이 걸린다는 점이지.


[InnoDB]

 InnoDB는 자체적으로 메인 메모리 안에 데이터 캐싱과 인덱싱을 위한 버퍼 풀(pool)을 관리해.
 그리고 MyISAM에서 지원하지 않는 row level locking을 지원하기 때문에, 특정 데이터가 변경, 삭제, 업데이트 시 해당 범위의 Row들을 함께 Locking할 수 있다는 점도 있지. 
 다만 메모리와 디스크 저장공간을 더 많이 차지한다는 단점을 갖고 있어.

 


[MyISAM vs InnoDB]

 내가 만약 간단한 게시판 같은 프로젝트를 한다면 어떤 엔진을 써야할까? 최근들어서

MyISAM은,

  • INSERT 와 SELECT 구문을 주로 사용하는 경우
  • 테이블을 대규모로 동시에 읽고 쓰지 않는 경우
  • 트랜잭션을 사용하지 않아도 되는 경우

 

InnoDB는,

  • 트랜잭션 처리가 필요한 대용량 데이터가 있는 경우
  • 높은 퍼포먼스가 필요한 대용량 사이트인 경우

 

 이상의 두가지 엔진에 대해서 알아보면서 간단한 게시판을 만들 때는 MyISAM을 사용하는게 좋은 선택이라고 결론내게 되었어. InnoDB를 사용하면 오히려 과한 기능 및 사용하지 않는 기능에 비해 차지하는 메모리가 많기 때문에 비효율적일 것 같아. 저렇게 생각했던 나 자신을 반성할게.. 트랜잭션을 지원하는 InnoDB를 사용하자!

 

(이 글을 쓰고나서 트랜잭션을 공부하고 나니 생각이 바뀌었어!)

2021/01/21 - [DATABASE] - 트랜잭션에 대한 MyISAM과 InnoDB의 차이

스토리지 엔진에는 위에 소개한 MyISAM과 InnoDB 말고도 정말 많은 종류가 있으니까 궁금하면 더 알아보시길!