의견.png

파티셔닝

위키원
ab9405 (토론 | 기여)님의 2019년 8월 12일 (월) 15:04 판
이동: 둘러보기, 검색

파티셔닝(partitioning)은 데이터베이스를 여러 부분으로 분할하는 것이다. 데이터베이스의 분할은 중요한 튜닝 기법으로 데이터가 너무 커졌을때, 조회하는 시간이 길어졌을 때 또는 관리 용이성, 성능, 가용성 등의 향상을 이유로 행해지는 것이 일반적이다. 분할된 각 부분은 '파티션'이라고 부른다. 가장 일반적인 것은 분산 데이터베이스 분할인데 각 파티션은 여러 노드에 분산 배치되어 사용자가 각 노드에서 로컬 트랜잭션을 수행 할 수 있다. 이것은 가용성과 보안을 유지하면서 특정 뷰에 관한 일반 트랜잭션의 성능을 향상시켜준다. 데이터베이스의 분할, 각각 작은 데이터베이스가 되도록 하는 분할 방법과 하나의 테이블과 같이 선택된 요소만 분리하는 방법이 있다. [1]

개요

파티셔닝에는 일반적으로 행으로 파티션을 나누는 수평 파티셔닝과 컬럼별로 파티셔닝을 나누는 수직 파티셔닝 두 가지 방법이 있다. 보통 일반적으로는 수평 파티셔닝을 사용한다. 파티셔닝은 퍼포먼스, availability, maintainability 를 목적으로 논리적인 데이터를 다수의 entity로 분할하는 행위를 말한다. 인덱스는 임의의 키 값의 따라 행 데이터 위치를 식별한다. 이 때 사용하는 기능인 파티셔닝은 테이블을 여러 개의 파티션으로 분할하여 키의 값에 따라 어떤 파티션에 속하는 행인지 배분하는 역할을 한다. [2] 대부분의 데이터베이스 관리 시스템에서 지원하지만 Mysql 5.1 미만에서는 지원하지 않는다. 샤딩 또한 이 파티셔닝의 종류 중 하나이다. [3]즉, 큰 테이블이나 데이터베이스를 관리하기 쉬운 파티션이라는 작은 단위로 물리적으로 분할하는 것을 말한다. 물리적인 데이터 분할이 있더라도, 데이터베이스에 접근하는 애플리케이션 입장에서는 이를 인식하지 못한다. [4]

등장 배경

서비스의 크기가 점점 커지고 데이터베이스에 저장하는 데이터의 규모 또한 대용량화가 되면서, 기존에 사용하는 데이터베이스 시스템의 용량의 한계와 성능의 저하를 가져오면서 초대형 데이터베이스와 같이 하나의 데이터베이스에 너무 큰 테이블이 드러가게 되면서 이러한 문제점을 해결하기 위하여 테이블을 '파티션'이라는 작은 단위로 나누어 관리하는 '파티셔닝'기법이 나타나게 된것이다. 파티셔닝 기법이 나타나면서 소프트웨어적으로 데이터베이스를 분산처리하여 성능이 저하되는 것을 방지하고 관리를 보다 수월하게 할 수 있게 되었다. [4]

목적

1. 성능(Performance)

  • 특정 데이터 조작 언어(DML)와 쿼리(Query)의 성능을 향상시킨다.
  • 주로 대용량 데이터 Write 환경에서 효율적이다.
  • 풀스캔에서 데이터 허용의 범위를 줄여 성능을 향상시킨다.
  • 많은 테이블이 있는 온라인 트랜잭션 처리 시스템에서 테이블 작업을 작은 단위인 파티션들로 분산시켜 경합을 줄인다.

2. 가용성(Availability)

  • 물리적인 파티셔닝으로 인하여 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
  • 테이블의 파티션 단위로 Disk I/O 를 분산하여 경합을 줄이므로 업데이트 성능을 향상시킨다.
  • 각 분할 영역으로 독립적으로 백업하고 복구할 수 있다.

3. 관리용이성 (Manageability)

  • 큰 테이블을 제거하여 관리를 쉽게 해준다. [4]


특징

종류

  • 수평(horizontal) 파티셔닝

수평 파티셔닝이란 샤딩(Sharding)과 동일한 개념으로써 스키마(schema)를 복제한 후 샤드키를 기준으로 데이터를 나누는 것을 말한다. 즉 스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다. 하나의 테이블의 각 행을 다른 테이블에 분산시키는 것이다. 수평 파티셔닝은 퍼포먼스, 가용성을 위하여 key를 기반으로 여러 곳에 분산 저장한다. 그리고 일반적으로 분산 저장 기술에서 파티셔닝은 수평 분할을 의미한다. 보통 수평 분할을 한다고 하였을 때는 하나의 데이터베이스 안에서 이루어지는 경우를 지칭한다. 장점에는 데이터의 개수를 기준으로 나누어 파티셔닝 하며, 데이터의 개수가 작아지고 따라서 데이터베이스의 개수도 작아지게 된다. 자연스럽게 성능은 향상된다. 단점은 서버 간 연결 과정이 많아지고 데이터를 찾는 과정이 기존보다 복잡해 지연시간이 증가하나. 또한 하나의 서버가 고장나게 된다면 데이터의 무결성이 깨질 가능성이 있다.

  • 수직(vertical) 파티셔닝

수직 파티셔닝이란 모든 컬럼들 중 특정 컬럼들을 쪼개어 따로 저장하는 형태를 의미한다. 스키마를 나누고 데이터가 따라 옮겨가는 것을 말하며 하나의 entity를 2개 이상으로 분리하는 작업으로 테이블의 일부 열을 빼내는 형태로 분할한다. 관계형 데이터베이스에서 3정규화와 같은 개념으로 접근하면 이해하기 쉽다. 하지만 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 과정이다. 수직 파티셔닝을 사용하면 자주 사용하는 컬럼 등을 분리시켜 성능을 향상시킬 수 있다. 그리고 한 테이블을 선택하면 결국 모든 컬럼을 메모리에 올리게 되므로써 필요하지 않은 컬럼까지 올라가서 한번에 읽을 수 있는 열이 줄어든다. 이는 I/O 측면에서 본다면 필요한 컬럼만 올리면 훨씬 많은 수의 열을 메모리에 올릴 수 있으니 성능상의 이점이 있으며 같은 타입의 데이터가 저장되기 때문에 저장 시 데이터의 압축률을 높일 수 있다. [4]

  • Key or Hash Based Partitioning

entity를 해쉬함수에 넣어서 나오는 값을 이용하여 서버를 정하는 방식으로 사용자의 ID가 숫자로만 이루어져 있다면 나머지 연산을 이용한다. 해시결과 데이터가 균등하게 분포되도록 해시함수를 정해야 한다. 해시함수를 바꾸는 것은 거의 불가능 하기 때문에 균등하게 나눌 수 있는 해시함수 선정이 중요하다.

  • Directory Based Partitioning

파티셔닝을 제공하는 특정 서비스를 만드는 것을 의미한다. 데이터베이스와 캐시를 적정히 조합하여 만들거나 샤드키를 조절하는 방법 등 여러가지가 있다. [3]

분할 기준

각주

  1. 데이터베이스_분할〉, 《위키백과》
  2. 데이터베이스(DB) 파티셔닝이란?〉, 《티스토리》
  3. 3.0 3.1 파티셔닝의 정의와 종류 그리고 샤딩〉, 《네이버 블로그》
  4. 4.0 4.1 4.2 4.3 [DB_DB_파티셔닝(Partitioning)이란]〉, 《블로그》

참고자료

같이 보기


  의견.png 이 파티셔닝 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.