blog

데이터 쏠림 현상 Data skew 에 대하여

날짜: 2025-02-18

목록으로


데이터 파티셔닝 시 특정 유저의 데이터 비중이 너무 커서 균형이 무너지는 현상을 “데이터 스큐(Data Skew)” 문제라고 합니다.

1. 데이터 스큐(Data Skew)란?


2. 데이터 스큐가 발생하는 주요 원인

  1. 편향된 키(Hot Key) 문제
    • 특정 유저(ID)나 특정 값이 너무 많은 데이터를 포함하는 경우
    • 예: “VIP 고객” 한 명이 전체 트랜잭션의 80%를 차지하는 경우
  2. 잘못된 파티셔닝 키 선택
    • 데이터가 고르게 분포되지 않는 파티션 키를 사용한 경우
    • 예: 날짜 기반 파티셔닝을 했는데, 특정 날짜(예: 블랙 프라이데이) 데이터가 급증하는 경우
  3. 동적 파티셔닝 오버로드
    • 새로운 파티션이 자주 생성되면서 특정 파티션이 급격히 커지는 문제
    • 예: 매일 새로운 유저 ID로 파티션을 만들었는데, 몇몇 유저만 지속적으로 데이터를 생성하는 경우
  4. 노드 불균형 (Distributed Systems)
    • 클러스터형 DB에서 일부 노드가 과부하되고 다른 노드는 가벼운 상태가 되는 문제
    • 예: Shard A가 트래픽을 90% 가져가고 Shard B는 10%만 처리하는 경우

3. 데이터 스큐가 초래하는 문제점


4. 데이터 스큐 해결 방법

1. 더 나은 파티션 키 선택

2. Hot Key 감지 및 해결

3. 동적 파티셔닝 제한

4. Read-Only 노드 활용

5. Adaptive Load Balancing


5. 예제: 해시 파티셔닝 적용

CREATE TABLE user_logs (
    user_id BIGINT NOT NULL,
    log_data TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
) PARTITION BY HASH (user_id);

CREATE TABLE user_logs_0 PARTITION OF user_logs FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE user_logs_1 PARTITION OF user_logs FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE user_logs_2 PARTITION OF user_logs FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE user_logs_3 PARTITION OF user_logs FOR VALUES WITH (MODULUS 4, REMAINDER 3);

결론

이제, 데이터가 균형 있게 분산되도록 최적화할 수 있습니다! 🚀


목록으로