본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.
partitioning
- database table을 더 작은 table들로 나누는 것
- vertical partitioning : column을 기준으로 table을 나누는 방식 (예 : 정규화)
- horizontal partitioning: row를 기준으로 table을 나누는 방식
partitioning 예시
Vertical partitioning 또 다른 예
- 게시글 목록을 띄울 때 content 부분은 필요하지 않지만 테이블 전체를 secondary storage에서 불러와야 하므로 성능이 안 좋아질 수 있음.
-> content를 따로 테이블을 분리한다.
Horizontal partitioning 예 (hash-based)
- 테이블의 크기가 커질수록 인덱스의 크기도 커진다.
- 테이블에 읽기/쓰기가 있을 때마다 인덱스에서 처리되는 시간도 조금씩 늘어난다.
- 해쉬 기반으로 테이블을 바꾸게 되면 어떤 유저의 정보를 알아내는 건 쉽지만 어떤 채널이나 알림 등을 기준으로 정보를 알아내는 것은 어렵다.
-> 가장 많이 사용될 패턴에 따라 partition key를 정하는 것이 중요! - 데이터가 균등하게 분배될 수 있도록 hash functions을 잘 정의하는 것도 중요!
- hash-based horizontal partitioning은 한 번 partition이 나눠져서 사용되면 이후에 partition을 추가하기 까다롭다.
- hash based 외에도 range based 등이 있다.
sharding
- horizontal partitioning처럼 동작
- 각 partition이 독립된 DB 서버에 저장 (horizontal은 같은 DB 서버에 저장) -> DB 서버 부하 분산 가능
- partition key를 shard key라고 부름.
- 각 partition을 shard라고 부름.
replication
- DB를 복제해서 여러 대의 DB 서버에 저장하는 방식
- 다른 DB에 문제가 생겼을 때 대체하는 용도로 DB 사용
- high availability(고가용성)
참고 사항
- 비슷한 용어들의 개념을 설명하는 목적의 영상입니다. 디테일한 내용들은 추가적인 공부가 필요합니다.
'데이터베이스(쉬운코드)' 카테고리의 다른 글
31. NoSQL (0) | 2025.02.11 |
---|---|
30. DBCP(DB connection pool) (0) | 2025.02.10 |
28. B tree 3부 : DB 인덱스로 쓰는 이유 (0) | 2025.02.10 |
27. B tree 2부 : 데이터 삭제 (1) | 2025.02.08 |
26. B tree 1부 : 개념, 특징, 데이터 삽입 (0) | 2025.02.07 |