티스토리 뷰
샤딩
수평 분할과 수직 분할
수직 분할
- 이름에 맞게 수직으로 테이블을 나누는 것이다. 특정 컬럼을 다른 테이블로 쪼개서 저장하는 것을 의미한다. 제 3정규화와 다르게 이미 정규화가 된 테이블을 나누는 것이다.
- 자주 쓰는 특정 컬럼을 분리하여, 성능을 향상할 수 있다.
수평 분할
- 테이블을 로우를 기준으로 수평으로 분리하는 것을 의미한다.
- Key 값을 기반으로 여러 곳에 분산하여 저장한다.
샤딩 이란?
- 위 수평 분할과 같은 개념으로서, 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산 저장하는 방법을 의미한다.
장점
- 로우의 개수가 줄어 스캔 범위가 줄면서 쿼리의 속도가 빨라진다.
- Scaling Out 이 가능하다.
- 장애가 샤드 단위로 발생함.
단점
- 프로그래밍 및 운영적인 복잡도가 높아진다.
- 데이터 유실이 생길 가능성이 높다.
샤딩의 방법
서로 다른 테이블의 어떻게 분산하고, 분산한 데이터를 어떻게 읽어올 것 인지는 샤드 키(shard key)에 따라 달라진다. 한쪽에 데이터가 몰리게 되면 샤딩이 무의미하기 때문에 균일하게 분산하는 것이 좋다.
해시 샤딩 (Hash Sharding)
- 데이터 베이스이의 key 값을 hashing ( 해시 함수 : id % 노드 개수 ) 하는 방식.
- 나눌 개수를 처음에 정해두면 변경할 수 없다
- Key-Value 형태의 NoSQL에 적합
동적 샤딩 ( Dynamic Sharding )
- Locator Service 를 통해 동적으로 테이블을 결정하는 방법
- Locator Service에 의존적인 방식이라는 한계가 있음.
- Key-Value 형태의 NoSQL에 적합
Entity Group
- RDBMS를 위한 샤딩 방법으로, 샤드를 물리적으로 나누고 연관관계를 가지고 있는 Row들끼리 묶어서 하나의 샤드에 저장하는 방법
- 하나의 샤드에 쿼리를 진행하면 효율적이지만 서로 다른 샤드가 영향을 받을 수 있는 쿼리는 일관성을 보장받을 수 없고 비 효율적이다.
'DataBase' 카테고리의 다른 글
인덱스 키의 빈번한 Update로 발생할 수 있는 오버헤드 (0) | 2022.10.13 |
---|---|
MySQL과 Redis (0) | 2022.10.10 |
Nested (Loop) Join 과 Hash Join (0) | 2022.08.23 |
CAP 정리란? (0) | 2022.08.20 |
트랜잭션 ( Transaction ) 이란? (0) | 2022.07.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 메모리 단편화
- 객체 풀
- 동적 타입 언어
- Memory Fragmentation
- Session
- pass by reference
- 장애 해결기
- 수평 분할
- RestAssured
- 컴포짓 패턴
- 세션 불일치
- pool
- Clean Architecture
- SpringBoot 2.2
- 육각형 아키텍처
- 메모리 파편화
- java
- 내부 단편화
- Sticky Session
- 수직 분할
- 정적 타입 언어
- 뾰족함
- Object Pool
- 동적 디스패치
- multimap
- OOP
- 외부 단편화
- ATDD
- 클린 아키텍처
- pass by value
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함