![데이터베이스 파티셔닝이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9eMI6%2FbtsKIDkQ7QI%2F31eRz0bE0BdcWeBD3n3ut1%2Fimg.png)
파티셔닝이란?
수직 파티셔닝 vs 수평 파티셔닝
수직 파티셔닝
수직 파티셔닝은 테이블을 컬럼 단위로 분할하여 관리, 수평 파티셔닝은 행 단위로 나누어 확장성과 성능을 개선합니다.
- 개념: 테이블의 컬럼을 기준으로 데이터를 분할합니다. 테이블의 특정 컬럼들을 분리하여 별도의 테이블로 만들어, 각 테이블이 전체 데이터의 일부를 갖도록 합니다.
- 장점:
- 데이터를 더 잘 관리하고 보안 수준을 높일 수 있습니다. 예를 들어, 민감한 데이터를 별도 테이블에 두고 접근 권한을 다르게 설정할 수 있습니다.
- 자주 조회되는 컬럼들만 모아서 별도 테이블로 만들면 메모리 사용을 최적화할 수 있습니다.
- 단점:
- 조인 연산이 필요할 수 있어 성능 저하가 발생할 수 있습니다.
- 테이블 간 데이터 일관성을 유지하기 어려울 수 있습니다.
- 사용 예:
- 고객의 개인정보(이름, 이메일 등)와 민감한 정보(신용카드 정보 등)를 분리할 때.
수평 파티셔닝
- 개념: 테이블의 행(row)을 기준으로 데이터를 분할합니다. 동일한 테이블 구조를 유지하면서, 데이터의 행을 나누어 여러 테이블에 저장합니다. 각 테이블은 데이터의 일부분을 포함하고, 이를 샤드(shard)라고도 합니다.
- 장점:
- 데이터 양이 줄어들어 각 파티션의 인덱스가 작아지고, 이를 통해 검색 성능이 개선됩니다.
- 분산된 여러 데이터베이스에 데이터를 저장할 수 있어 확장성이 높아집니다.
- 단점:
- 데이터의 위치를 고려한 복잡한 쿼리 로직이 필요할 수 있습니다.
- 특정 샤드에 데이터가 집중되면(핫스팟), 부하가 불균형하게 발생할 수 있습니다.
- 사용 예:
- 소셜 미디어 플랫폼에서 사용자 데이터를 사용자 ID에 따라 분할하여 서로 다른 샤드에 저장할 때.
파티셔닝 유형
1. Range 기준으로 파티셔닝 (Dates, customer id 등으로 분리)
2. List를 기준으로 파티셔닝 (zip codes 등 으로 분리)
3. Hash를 기준으로 파티셔닝 (Hash function으로 분리)
파티셔닝 vs 샤딩
파티셔닝
파티셔닝은 같은 데이터베이스 내의 큰 테이블을 여러개의 테이블로 나눕니다.
파티셔닝은 테이블 이름이나 스키마가 다릅니다.
샤딩
샤딩은 여러 데이터베이스 서버의 큰 테이블을 여러 테이블로 나눕니다.
샤딩은 테이블 이름은 완전히 동일하나 서버가 다릅니다.
파티셔닝의 장점
1. 하나의 파티션 접근시 query performance를 향상 시킬 수 있습니다.
2. Sequential scan vs scattered index scan - 한번에 여러 데이터를 요구할때 분산 index scan 대신 순차적 scan을 활용할 수 있습니다.
3. bulk loading이 partition attach 방식으로 쉽습니다.
4. 오래된 아카이빙 데이터를 거의 사용하지 않는 싼 스토리지로 옮길 수 있습니다.
파티셔닝의 단점
1. Row를 업데이트하면 특정 파티션에서 다른 파티션으로 데이터를 옮겨야할 수 있습니다. (실패 확률도 올라감)
2. 비 효율적인 쿼리는 모든 파티션을 scan하게해서 느린 성능을 초래할 수 있습니다.
3. 스키마 변경이 어려울 수 있습니다.
'CS 지식 > 데이터베이스 기본 다지기' 카테고리의 다른 글
Database Engine 비교하기 (1) | 2024.11.20 |
---|---|
데이터베이스 복제(Replication)란? (0) | 2024.11.17 |
Row Oriented Database vs Column Oriented Database (3) | 2024.10.13 |
Transaction 과 ACID (0) | 2024.10.06 |
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.