다양한 사이드 프로젝트에 오픈소스이자 상대적 경량적인 Mysql을 써왔다.
문득, Oracle은 왜 대규모 어플리케이션 및 금융권에서 많이 사용할까 궁금함이 생겼다.
그래서 이 글을 작성한다.
(최대한 Mysql 버전별로 (5.5,8.0) 비교해보긴 했는데, 부족하거나 다른점이 있다면 댓글 남겨주세요.)
개발사 : AB -> Sun -> 오라클
라이선스 : GPL, 상업적 라이센스도 존재한다.
사용되는 곳 : Web App, 중소규모 DB, 스타트업 및 중소기업
개발사 : Oracle
라이선스 : 상업적 라이선스
사용사례 : 대규모 엔터프라이즈 환경, 금융, 의료, 대형 데이터베이스 시스템
Oracle은 고급 윈도우 함수를 지원하지만(Window Function) Mysql은 그렇지 못하다.
윈도우 함수는 보통 데이터 분석 및 통계 계산에 강력한 이점을 가진다.
-- Oracle DB 예시
SELECT
employee_id,
department_id,
salary,
AVG(salary) OVER (PARTITION BY department_id ORDER BY salary RANGE BETWEEN INTERVAL '1' MONTH PRECEDING AND INTERVAL '1' MONTH FOLLOWING) AS moving_avg_salary
FROM
employees;
위의 예시는 특정 범위 내에서 이동 평균을 계산한다.
MODEL Clause : 데이터 시뮬레이션 및 예측을 수행하는 함수이다.
RANGE BETWEEN INTERVAL : 기간을 기준으로 윈도우를 정의하여 더 복잡한 계산을 수행할 수 있다.
Composite Partitioning : 다양한 파티셔닝 방법을 조합한다. 예를 들어 Range-Hash 파티셔닝, List-Hash 파티셔닝 등
Interval Partitioning : 지정한 간격으로 자동 파티셔닝을 수행한다.
Reference Partitioning : 외래 키 기반으로 파티션을 자동으로 유지 관리한다.
Ex,.
CREATE TABLE sales
(
sales_id NUMBER,
sale_date DATE,
amount NUMBER
)
PARTITION BY RANGE (sale_date)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(
PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD'))
);
이걸 보고 아닌데..? Mysql도 flashback 사용할 수 있을텐데.. 라고 말할 수도 있다.
물론 유틸리티를 사용하거나 커스터마이징하면 가능하긴 하다.
하지만 8.0기준으로 mysql에서 지원하지 않는다.(여담이지만 mariadb 10.2는 지원한다.)
SELECT * FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);
금융권에서 사용하는 이유중 하나라고 생각한다.
비동기 메시지 처리 및 통합 기능을 제공한다.
이 부분은 어려우므로 좀 더 자세하게 설명하자면, c/s 환경에서 클라이언트의 요청이 바로 처리되기 때문에 연결된 작업이라 볼 수 있음. 이런 모델은 다음 작업을 진행하기 전에 처리한 작업에 대한 결과를 얻어서 이용하는 경우 적당하다고 볼 수 있음.
근데 이런 경우 어플리케이션이 항상 사용가능한 상태여야 하기 때문에 네트워크 문제가 발생하면 전체 어플리케이션이 모두 사용 못하는 문제가 발생함.
Queuing 기법은 프로그램들 간 비연결적인 작업으로 생산자/소비자 형태로 구성됨. 생산자 프로그램이 queue에 요청을 넣고, 소비자 프로그램이 큐에서 요청을 꺼내 처리하게 함. Oracle에서 이런 큐잉 기법을 기존의 다른 미들웨어를 사용하지 않고 직접 사용 가능하게 했음.(8 이상부터)
조금 더 자세한 설명이나 예시를 보고 싶다면?
아래는 예시이다.
BEGIN
DBMS_AQADM.CREATE_QUEUE_TABLE(
queue_table => 'message_queue_table',
queue_payload_type => 'RAW'
);
END;
RAC, Data Guard, FGA 등 여러 기능들을 제공한다.
왜 대규모 엔터프라이즈 환경이나 금융권에서 이러한 비싸고 리소스를 많이먹는 Oracle을 채택하는지 알 수 있었다.
역시 아는게 애매하면 찾아봐야한다.