내 잡다한 노트
OLTP DB vs OLAP DB ( 예시 쿼리 ) 본문
OLTP DB (온라인 트랜잭션 처리)
목적:
- 실시간 데이터 입력, 수정, 삭제 등 빈번한 CRUD(생성, 읽기, 업데이트, 삭제) 작업
- 빠른 응답 속도와 높은 동시성 보장
예시 쿼리:
- 신규 주문 생성 (INSERT)
- 주문 테이블에 신규 주문을 추가하는 쿼리로, 트랜잭션 내에서 처리되어야 전체 주문 데이터의 일관성을 유지합니다.
INSERT INTO orders (order_id, customer_id, order_date, status) VALUES ('ORD12345', 'CUST001', NOW(), 'pending');
- 주문 테이블에 신규 주문을 추가하는 쿼리로, 트랜잭션 내에서 처리되어야 전체 주문 데이터의 일관성을 유지합니다.
- 주문 상태 업데이트 (UPDATE)
- 주문의 상태를 변경하는 작업은 빠른 응답과 동시성 제어가 중요합니다.
UPDATE orders SET status = 'completed' WHERE order_id = 'ORD12345';
- 주문의 상태를 변경하는 작업은 빠른 응답과 동시성 제어가 중요합니다.
- 사용자 정보 조회 (SELECT)
- 단일 레코드 또는 소수의 레코드를 빠르게 조회하는 작업.
SELECT * FROM customers WHERE customer_id = 'CUST001';
- 단일 레코드 또는 소수의 레코드를 빠르게 조회하는 작업.
- 주문 취소 (DELETE)
- 주문 취소와 같이 특정 레코드를 삭제하는 작업.
DELETE FROM orders WHERE order_id = 'ORD12345';
- 주문 취소와 같이 특정 레코드를 삭제하는 작업.
특징:
- 짧은 응답 시간과 높은 빈도의 트랜잭션 처리
- 데이터의 정확성과 일관성을 보장하기 위한 강력한 트랜잭션 관리가 필요
OLAP DB (온라인 분석 처리)
목적:
- 대량의 데이터 집계, 분석, 리포팅
- 복잡한 쿼리, 다차원 분석, 대규모 데이터 스캔
예시 쿼리:
- 일별 매출 집계 (GROUP BY, 집계 함수 사용)
- 대량의 주문 데이터를 날짜별로 집계하여 분석하는 쿼리입니다.
SELECT order_date, SUM(total_amount) AS daily_sales FROM orders GROUP BY order_date ORDER BY order_date;
- 대량의 주문 데이터를 날짜별로 집계하여 분석하는 쿼리입니다.
- 고객별 구매 패턴 분석 (JOIN 및 집계)
- 고객과 주문 데이터를 조인하여 고객별 구매 건수와 총 구매 금액을 계산합니다.
SELECT c.customer_id, c.name, COUNT(o.order_id) AS order_count, SUM(o.total_amount) AS total_spent FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_id, c.name ORDER BY total_spent DESC;
- 고객과 주문 데이터를 조인하여 고객별 구매 건수와 총 구매 금액을 계산합니다.
- 시간대별 트래픽 분석 (윈도우 함수, 집계)
- 웹 로그 데이터를 시간대별로 집계하여 분석하는 쿼리. 복잡한 집계 및 윈도우 함수 사용 사례입니다.
SELECT hour, COUNT(*) AS hits, AVG(COUNT(*)) OVER () AS avg_hits FROM web_logs GROUP BY hour ORDER BY hour;
- 웹 로그 데이터를 시간대별로 집계하여 분석하는 쿼리. 복잡한 집계 및 윈도우 함수 사용 사례입니다.
- 다차원 분석을 위한 피벗 쿼리 (CASE문 활용)
- 지역별로 특정 기간 동안의 매출을 피벗 형태로 집계하는 예시입니다.
SELECT region, SUM(CASE WHEN order_date BETWEEN '2025-01-01' AND '2025-01-31' THEN total_amount ELSE 0 END) AS jan_sales, SUM(CASE WHEN order_date BETWEEN '2025-02-01' AND '2025-02-28' THEN total_amount ELSE 0 END) AS feb_sales FROM orders GROUP BY region;
- 지역별로 특정 기간 동안의 매출을 피벗 형태로 집계하는 예시입니다.
특징:
- 대규모 데이터 스캔 및 복잡한 집계 연산을 처리
- 응답 시간이 상대적으로 길어도 전체 배치 처리나 주기적 리포트 생성에 적합
- 데이터 적재(ETL) 후 별도의 분석 전용 DB나 데이터 웨어하우스에서 수행하는 경우가 많음
'DB' 카테고리의 다른 글
DB Connection (0) | 2025.02.17 |
---|---|
DB 관련 직업들과 역할 (0) | 2025.02.13 |
DB에서 Join의 필요성 (0) | 2025.02.06 |
NoSQL과 SQL 기반 DB 비교 (0) | 2025.02.04 |
DB와 관련된 기본 용어 (0) | 2025.01.27 |