검수요청.png검수요청.png

마이에스큐엘

위키원
(마이 에스큐엘에서 넘어옴)
이동: 둘러보기, 검색
마이에스큐엘(MySQL)
마이에스큐엘(MySQL)
몬티 와이드니어스(Monty Widenius) MySQL 창시자

마이에스큐엘(MySQL)은 구조화된 질의어인 에스큐엘(SQL)을 사용하는 오픈소스관계형 데이터베이스 관리 시스템(RDBMS)이다. 1995년 몬티 와이드니어스(Monty Widenius)가 개발했다. 마이(My)라는 이름은 그의 큰 딸 이름이다. 주로 영어로 MySQL이라고 쓴다. MySQL의 로고는 돌고래이다. MySQL은 2008년 썬 마이크로시스템즈에 인수되었고, 2010년 썬이 오라클 회사에 인수되면서 MySQL도 오라클로 넘어갔다. 개발자인 와이드니어스는 MySQL이 Oracle에 넘어간 것에 항의하면서 MySQL 5 버전을 포크하여 마리아디비(MariaDB)를 만들었다.

개요[편집]

마이에스큐엘(MySQL)은 세계에서 가장 많이 쓰이는 오픈소스관계형 데이터베이스 관리 시스템(RDBMS)이다. 관계형을 제외한 데이터베이스 관리 시스템(DBMS)들을 모두 포함해도 Oracle DB 다음으로 두번째로 점유율이 높다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 오라클이 관리 및 지원하고있고, Qt처럼 이중 라이선스가 적용된다.[1] MySQL은 개발자의 큰 딸 이름인 My와 Structured Query Language의 약어인 SQL을 합쳐서 지어졌다.

역사[편집]

  • 1994년 : 몬티 와이드니어스가 MySQL 개발 시작
  • 1995년 5월 : 스웨덴의 MySQL AB 회사에 의해 MySQL 첫 버전 출시
  • 1998년 1월 : 윈도우용 MySQL 첫 버전 출시
  • 2008년 : 썬 마이크로시스템즈가 MySQL AB 회사 인수
  • 2010년 1월 : 오라클 회사가 썬 마이크로시스템즈를 인수했고 그에 따라 MySQL도 오라클이 관리하게 되었다.
  • 2015년 11월 : MySQL 5.7버전 출시
  • 2018년 4월 : MySQL 8.0버전 출시

특징[편집]

MySQL은 오픈소스 기반의 데이터베이스 관리 시스템(DBMS)이고, 다양한 플랫폼을 지원하며, 대용량 데이터베이스도 다룰 수 있다. 또, 처리 속도가 매우 빠르며, 웹에 최적화되어 있다. 워크벤치라는 통합 개발 환경(IDE)을 제공해 주며 시장점유율이 상당히 높다.

MySQL과 SQL Server과 PostgreSQL 비교[편집]

관계형 데이터베이스 관리 시스템(RDBMS)로 많이 사용하는 MySQL과 SQL Server 그리고 PostgreSQL의 특징 및 차이점에 대해서 알아보면 이와 같다.

MySQL[편집]

  • 오픈소스, 오라클 소유의 유료버전이다.
  • Row Update : 업데이트가 수행되고 변경된 데이터가 롤백 세그먼트로 복사. 읽기에는 속도가 느리지만 쓰기는 원자적이며 보조 인덱스의 열이 변경되어도 모든 인덱스를 변경할 필요가 없다.
  • Vacuum / Defragmentation : Vacuum 및 인덱스 압축은 매우 효율적이다.
  • 쿼리 요청에 대한 버퍼풀/캐시 : 캐시는 사용자 쿼리를 버퍼풀이라고 한다. 이 캐시는 필요에 따라 큰 크기로 설정할 수 있으므로 서버의 다른 프로세스에 충분한 메모리만 남겨둔다. 버퍼풀을 여러 부분으로 분할하여 메모리 구조에 대한 경합을 최소화하고 테이블을 버퍼풀에 고정할 수 있다. 테이블 스캔 또는 mysqldump는 이전 데이터를 제거한다.
  • 제약 조건 지원 : 기본키, 외래키, not null 제약 조건, 고유 제약조건, 기본 제약조건을 지원. CHECK 제약 조건을 지원하지 않는다.
  • 임시 테이블 : CTE를 지원하고 전역 임시 테이블 및 테이블 변수를 지원하지 않는다. 동일한 쿼리에서 TEMPORARY 테이블을 두 번이상 참조할 수 없다.
  • 병렬 쿼리 실행 : 일반적으로 쿼리당 1개의 CPU를 사용한다.
  • 인덱스 : 인덱스 구성 테이블을 지원한다. 지속된 인덱스, 구체화된 뷰를 지원하지 않는다. 다중 열 인덱스에는 최대 16개의 열을 포함 할 수 있다. 부분 인덱스를 지원하지 않는다. 단일 쿼리에 다중 인덱스 사용이 가능하다.
  • 조인 알고리즘 : 중첩 루프 알고리즘 또는 변형을 사용하여 테이블간의 조인을 실행한다.
  • 메모리 최적화 테이블 : 테이블을 메모리에 저장할 수 있다. 메모리에 작성된 테이블은 트랜잭션을 지원하지 않으므로 데이터가 손상 될 수 있다. 이러한 테이블은 임시 영역 또는 읽기 전용 캐시로 사용해야한다.
  • JSON 데이터 유형 : JSON 데이터 형식을 지원하며 전체 문서를 바꾸는 대신 JSON을 통한 부분 업데이트를 지원한다. 그러나 많은 제한이 있다. JSON에 대한 인덱스 생성은 지원하지 않는다.
  • 고급 데이터 형식 : 지형 공간 데이터 유형을 지원한다. 사용자 정의 유형이 없다.
  • 파이셔닝 지원 : HASH 파이셔닝, 여러 컬럼을 기반으로 하는 RANGE 또는 LIST 파티셔닝, HASH와 유사한 KEY 파티셔닝을 지원한다.
  • 샤딩 지원 : 공유를 잘 구현하지 못한다.

SQL Server[편집]

  • SQL Server Express의 무료버전과 그 외의 유료버전.
  • Row Update : Row-Store 데이터베이스 엔진,인메모리 데이터베이스 엔진 업데이트는 인서트+삭제 표시로 구현한다. 가비지 컬렉터는 논 블럭킹 병렬로 작업하고 Columnstore 데이터베이스 엔진은 in-place 업데이트한다.
  • Vacuum / Defragmentation : 메모리 내 가비지 컬렉터는 최대 15%의 오버헤드가 발생할 수 있다.
  • 쿼리 요청에 대한 버퍼풀/캐시 : 메모리는 버퍼풀이라고 하고 크기는 필요에 따라 크게 설정할 수 있으며 여러 버퍼풀을 설정하는 옵션은 없다.
  • 제약 조건 지원 : 기본 키, 외래키, not null 제약 조건, check 제약 조건, 고유 제약 조건, 기본 제약 조건을 지원한다.
  • 임시 테이블 : CTE, 전역, 로컬 임시테이블 및 테이블 변수를 지원한다.
  • 병렬 쿼리 실행 : 쿼리 계획은 여러 CPU를 활용 할 수 있다.
  • 인덱스 : 인덱스 구성 테이블을 지원한다. 다중 열 인덱스에는 최대 16개의 열을 포함 할 수 있다. 부분 인덱스를 지원하고 단인 쿼리에 다중 인덱스 사용이 불가능하다.
  • 조인 알고리즘 : 중첩 루프 조인, 해시 조인 및 병합 조인 알고리즘을 지원한다.
  • 메모리 최적화 테이블 : 인 메모리 OLTP가 데이터베이스 엔진에 통합되어 있다.
  • JSON 데이터 유형 : JSON 데이터 형식을 지원하며 부분 업데이트를 지원한다.
  • 고급 데이터 형식 : 지형 공간 데이터 유형과 계층 적 데이터를 지원한다.
  • 파이셔닝 지원 : RANGE 파이셔닝을 지원한다.
  • 샤딩 지원 : 표준 공유 구현이 없다.

PostgreSQL[편집]

  • 오픈소스, 무료이다.
  • Row Update : 업데이트는 인서트+삭제 표시로 구현된다. 모든 색인에는 행의 실제 ID에 대한 링크가 있다. 열이 업데이트되면 새로운 물리적ID가 있는 새 행이 만들어지고 모든 행이 새로운 행의 실제ID에 대한 포인터를 얻기 위해 변경된 열을 참조하지 않는 경우에도 모든 인덱스가 업데이트 되어야 하기 때문에 업데이트 오버헤드가 발생한다.
  • Vacuum / Defragmentation : Vacuum은 전체 테이블 스캔을 수행하여 삭제 된 행을 찾는다. 프로세스, 사용자의 작업에 큰 오버헤드를 줄 수 있다.
  • 쿼리 요청에 대한 버퍼풀/캐시 : 데이터 페이지를 위한 공유 메모리를 유지한다. 프로세스 기반 시스템이기 때문에 각 연결은 고유한 고유 OS 프로세스를 가지며 자체 메모리를 가지고 있다. 프로세스는 실행이 끝난 후 메모리를 해제 한다. 따라서 많은 연결을 확장하는데 문제가 발생 할 수 있다.
  • 제약 조건 지원 : 기본 키, 외래키, not null 제약 조건, 체크 제약 조건, 유니크 제약 조건, 기본 제약 조건을 지원한다.
  • 임시 테이블 : CTE, 전역 및 로컬 임시 테이블 및 테이블 변수를 지원한다. 동일한 이름을 가진 두 개의 테이블을 만들면 다른 하나는 일반 테이블이다.
  • 병렬 쿼리 실행 : 쿼리 계획은 여러 CPU를 활용 할 수 있다.
  • 인덱스 : 인덱스 구성 테이블을 지원하지않는다. 지속된 인덱스,구체화된 뷰는 지원한다. 다중 열 인덱스에는 최대 32개의 열을 포함 할 수 있다. 부분 인덱스를 지원하고 단일 쿼리에 다중 인덱스 사용이 가능하다.
  • 조인 알고리즘 : 중첩 루프 조인, 해시 조인 및 병합 조인 알고리즘을 지원한다.
  • 메모리 최적화 테이블 : 메모리 엔진을 제공하지 않는다.
  • JSON 데이터 유형 : JSON 데이터 유형을 지원하며 부분 업데이트를 지원한다.
  • 고급 데이터 형식 : 지형 공간 및 다차원 배열, 사용자 정의 형식 등과 같은 많은 고급 데이터 형식을 지원한다.
  • 파이셔닝 지원 : RANGE및 LIST 파티셔닝을 지원하지만 파티션 인덱스는 수동으로 생성해야하며 테이블 상속을 통한 구식 파티셔닝이 필요하다. 하위 테이블에는 하위 테이블에 부모 테이블과 인덱스를 별도로 적용해야하는 열이 더 많을 수 있다.
  • 샤딩 지원 : 공유를 구현하는 Postgres 포크는 수십가지가 있지만 아직 커뮤니티 출시에 추가된 것은 없다.

프로그래밍 언어[편집]

응용 프로그램에서 MySQL [데[이터베이스]]에 접근하기 위해 다수의 프로그래밍 언어로 된 API를 사용할 수 있다. 이들 API는 언어에 종속적이다. MySQL은 공식적으로 아래의 프로그래밍 언어를 지원한다.

MySQL은 MyODBC라고 불리는 ODBC인터페이스를 지원해서 다른 프로그래밍 언어를 지원한다. 그 예로 ASP콜드퓨전을 들 수 있다. MySQL은 대부분 ANSI C로 구현되어있다.[1]

평가와 전망[편집]

오픈소스 DBMS 트렌드.[2]

고가의 오라클RAC에 대응하는 MySQL, MariaDB 등의 이중화 기능은 활발히 오픈소스 그룹에서 개발되고 있다. 구글 등 인터넷에는 많은 관련 기술 자료가 올라와 있으므로 기술 엔지니어가 자신의 업무 환경에 적합한가를 PoC 등으로 확인하고 해결책을 찾아간다면 금융회사에도 충분히 적용할 수 있는 수준까지 발전하였다. 가트너의 리서치 부사장 Merv Adrian은 다음과 같이 전망하고 있다. “2018년까지 회사 내 신규 개발에 오픈소스 DBMS 사용율은 70%가 넘을 것이다. 그리고 기존의 상용 RDBMS들의 50%는 대체되었거나, 대체가 진행 중이다.". 다만 우리나라에는 적용사례가 거의 없어서 기술적으로 참조할 만한 한글 자료는 아직까지 드물다. 하지만 L2U 등으로 점점 적용 사이트 및 기술지원 업체가 늘어나고 있으니 앞으로 기대해 볼 만하다. 오픈소스의 기술적 어려움, 레퍼런스 부족 등의 이유로 도입을 주저하기 보다는 단위 업무시스템에서부터 적용하여 나갈 것을 권한다. 이를 잘 적용하고 운용하기 위해서는 담당 기술 조직을 갖추고 전문 기술지원 업체와의 유기적인 협조체계가 중요하다.[3]

각주[편집]

  1. 1.0 1.1 MySQL〉, 《위키백과》
  2. Veritas Technologies LLC, 〈Keeping Data Protected through the Rapid Shift from Traditional RDBMS to Open Source RDBMS〉, 《SlideShare》, 2017-09-29
  3. 이상익, 〈오픈소스DBMS로 고가용성 확보하기 - MySQL 이중화 구성 방안〉, 《투이컨설팅》, 2018-12-11

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 마이에스큐엘 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.