Oracle과 MySQL은 많은 DB 툴 중에서 양대산맥이 아닐까 싶다.
나는 학원에서 처음 DB에 대해서 배울 때 Oracle을 배우고 프로젝트를 진행할 때 MySQL을 사용하였다.
(이유는 단지 둘 다 경험을 해보고 싶어서 두 개 다 사용해 보았다.
oracle은 MacOS를 정식으로 지원하지 않아서 docker를 통해 겨우겨우 실행한 경험이 있다...)
보통 Oracle은 충분한 예산과 복잡한 비즈니스를 요구하는 큰 프로젝트를 주로 수행하는 대기업이, MySQL은 돈이 적거나 중소기업들이 선호한다.
그럼 이 2가지 DB관리 툴에 대한 특징과 차이점이 무엇이 있는지 알아보자.
Oracle
미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용되는 DBMS이다.
특징
1. 관리시스템
중앙 집중 방식으로 관리자 모니터링이 가능하고, Multiples Databases 튜닝이 가능하다.
다수의 사용자가 동시에 접근이 가능하다.
2. 변화 관리
변경 plan을 작성하고 실제 구현하기 전에 변경 사항의 효과를 볼 수 있다.
생산 시스템을 방해하지 않는다.
3. 경고
오류가 발생하면 사용자 계정에 등록되어 있는 이메일로 연락이 온다.
경고는 예정된 가동 정지 시간 동안 차단 될 수 있다.
4. 분산처리
DBMS 실행 컴퓨터 / 서버 역할 컴퓨터 / DB 응용 프로그램 실행 컴퓨터 다르게 분산처리한다.
5. 용량 & 처리
다른 데이터 베이스보다 고성능의 트랜잭션을 처리한다.
비용을 최소화하기 위해 테이블과 인덱스를 분석한다.
단점
- "페이스북이 가진 데이터를 모두 Oracle DBMS에 저장하면 페이스북은 망할 것이다"라는 말이 나올 정도로 비싸다.
- 기능이 많아 진입장벽이 높다.
- 메모리 사용률이 많기 때문에 높은 하드웨어 사양이 필요하다.
MySQL
전 세계적으로 널리 사용되고 있는 오픈소스 데이터베이스이며, MySQL AB사가 개발하여 배포, 판매하고 있는 데이터베이스 관리 툴이다.
특징
1. 용량 & 처리
오직 1MB의 RAM만 사용할 만큼 용량 차지가 적다 (매우 적은 오버헤드를 사용한다.)
처리 속도가 빠르고 대용량 데이터 처리에 용이하다.
2. 접근성
다른 데이터베이스 관리툴에 비해 구조가 간단하여 사용하기가 매우 쉽다.
3. 유연성 및 확장성
다양한 프로그래밍 언어와 통합할 수 있다.
거의 모든 운영체제에서 사용이 가능하다.
4. 고급기능 지원
Stored Procedures, Triggers, View, Sub-Query, Transactional Table, Cascading Update & Delete
타사 InnoDB Storage Engine을 사용할 수 있다.
5. 가격
MySQL 데이터베이스는 무료라서 비용적인 부담이 적다.
오픈소스는 무료, 상업용은 유료이다.
단점
- 복잡한 쿼리는 성능의 저하를 일으킨다.
- 트랜잭션 지원이 완벽하지 않다.
- 사용자정의 함수 사용이 쉽지 않고 유연하지 않다.
차이점
Oracle | MySQL | |
구조적 | DB 서버가 통합된 하나의 스토리지를 공유하는 방식 | DB 서버마다 독립적인 스토리지를 할당하는 방식 |
조인 방식 | 중첩 루프 조인, 해시 조인, 소트 머지 조인 방식 제공 | 대부분 중첩 루프 조인 방식을 제공 |
확장성 | 별도의 DBMS를 설치해 사용할 수 없음 | 별도의 DBMS를 설치해 사용할 수 있음 |
메모리 사용율 | 사용율이 커서 최소 수백MB 이상이 되어야 설치 가능 | 사용율이 낮아서 1MB 환경에서도 설치 가능 |
대규모 트래픽 | 다중 CPU 및 다중 서버 아키텍처 지원 데이터베이서 파티셔닝, 클러스터링, 병렬처리 등의 기능을 제공 |
충분한 확장성을 제공하긴 하지만 대규모 트래픽을 처리하기 위해선 인덱싱, 분산 데이터베이스, 캐싱 등의 도움이 필요 |
구문 차이
Oracle | MySQL | |
NULL | NVL(열명, '대쳇값') | IFNULL(열명, '대쳇값') |
현재 날짜 | SYSDATE | NOW() |
조건문 | DECODE(열명, 값, '참값', '거짓값') | IF(조건식, '참값', '거짓갑') |
날짜 형식 | TO_CHAR(날짜열, '형식') | DATE_FORMAT(날짜열, '형식') |
요일 변환 | '일 ~ 토'를 '1 ~ 7'로 계산 | '일 ~ 토'를 '0 ~ 6'으로 계산 |
문자 결합 | 열값 또는 문자열 || 열값 또는 문자열 | CONCAT(열값 또는 문자열, 열값 또는 문자열) |
문자 추출 | SUBSTR(열값 또는 문자열, 시작 위치, 추출 개수) | SUBSTRING(열값 또는 문자열, 시작 위치, 추출 개수) |
페이징 처리 | ROWNUM <= 숫자 | LIMIT 숫자 |
자동 증가값 | 시퀀스 생성 후 SELECT 시퀀스명.nextval FROM dual 구문 사용 | AUTO_INCREMENT |
참고
'멋진 개발자 > DB' 카테고리의 다른 글
개발자 성장 기록 56 - JOIN (0) | 2024.04.25 |
---|---|
개발자 성장 기록 50 - 인덱스(Index) (0) | 2024.04.17 |
개발자 성장 기록 48 - WHERE, HAVING (0) | 2024.04.15 |
개발자 성장 기록 47 - DELETE, TRUNCATE, DROP (0) | 2024.04.12 |
개발자 성장 기록 40 - Redis (0) | 2024.04.04 |