17. Replication & Distribution

![[[5.1] 복제 과정.png]]

-- 스케일 아웃

-- 복제 : 복제본을 가지는 데이터베이스들이 많이 존재

-- 복제 지연
-- 1. 네트워크 지연
-- 2. 마스터와 레플리카간의 대역폭
-- 3. 노드간에 물리적 거리

    -- 해결책
    -- 1. 마스터 노드에 직접 읽기
    -- 2. 캐시 활용

-- 성능적인 문제

18. Partitioning & Sharding⭐️

![[[5.2] 샤딩 다이어그램.png]]

-- 파티셔닝
-- > 거대한 파일을 논리적인 기준을 잡고 나눠서 저장하는 기법

-- 1. RANGE : 날짜, 연도, 월, 번호 연속적인 값을 기준을 나눌 떄 효과적이다.
-- 2. LIST : 국가코드, 카테고리, 이런 정해진 값을 목록에 따라 나눌떄
-- 3. Hash : 특정 기준 없이 균등하게 저장할 떄

CREATE TABLE access_logs (
     log_id BIGINT AUTO_INCREMENT,
     user_id INT NOT NULL,
     access_time DATETIME NOT NULL,
     message VARCHAR(255),
     PRIMARY KEY (log_id, access_time) -- 파티션 키는 PK에 포함되어야 함
)
    PARTITION BY RANGE (TO_DAYS(access_time)) (
        PARTITION p202401 VALUES LESS THAN (TO_DAYS('2024-02-01')),
        PARTITION p202402 VALUES LESS THAN (TO_DAYS('2024-03-01')),
        PARTITION p202403 VALUES LESS THAN (TO_DAYS('2024-04-01')),
        PARTITION p_future VALUES LESS THAN MAXVALUE
        );


-- 1. 샤드 키 선정
    -- > is_active [boolean], country_code

-- 2. Cross Shard

-- 3. 분산 트랜잭션
    -- > 2PC, 사가 패턴

쓰기 확장.

파티셔닝 하나의 디비엣 논리적 기준으로 파티션으로 테이블을 나누는 것.

19. 데이터는 쌓이고 비용은 늘어난다. 데이터 압축과 아카이빙

![[[5.3] 데이터 아카이빙.png]]

![[[5.3] 데이터 압축.png]]

-- 1. 데이터 저장에 대한 비용
-- 2. 성능 저하

-- 압축 기능을 활성화하여 테이블 생성
CREATE TABLE logs_compressed (
     log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
     user_id INT,
     message TEXT,
     created_at TIMESTAMP
)
    ROW_FORMAT=COMPRESSED
    KEY_BLOCK_SIZE=8; -- 페이지 압축 후 목표 크기 (KB). 4, 8, 16 등.