데이터베이스는 일반적으로 열과 행이 있는 테이블로 구성됩니다. 그러나 기존의 모놀리식 데이터베이스는 크기가 커지면서 느리고 번거로울 수 있습니다. 데이터베이스 파티셔닝은 데이터를 랭글링하고 데이터베이스를 원활하게 실행하기 위한 강력한 기술입니다.
데이터베이스 파티셔닝은 큰 테이블이나 데이터베이스를 파티션이라는 더 작고 관리하기 쉬운 청크로 분할하는 프로세스입니다. 이를 통해 데이터의 일부만 쿼리할 수 있으므로 로드 속도가 빨라집니다.
일반적으로 파티셔닝에는 두 가지 유형이 있습니다.
수평 분할(샤딩)
테이블을 행별로 분할합니다. 각 파티션에는 동일한 스키마이지만 다른 행이 포함되어 있습니다. 분산 컴퓨팅을 위해 데이터를 고객 또는 사용자별로 나눌 수 있거나 데이터가 너무 커서 하나의 DB에 저장할 수 없는 멀티 테넌트 애플리케이션에 이상적입니다.
샤딩에는 다양한 종류가 있습니다.
키 기반(해시) 샤딩: 샤드는 각 레코드 내의 특정 키 열에 대한 해시 함수를 사용하여 결정됩니다. 이 해시 함수는 사용 가능한 샤드에 레코드를 균일하게 배포합니다. 가장 큰 장점은 데이터와 워크로드가 고르게 분산된다는 점이지만, 여러 샤드에 걸쳐 재샤딩을 수행하는 쿼리가 복잡해질 수 있습니다.
범위 기반 샤딩은 특정 키의 범위를 기반으로 데이터를 샤드로 나눕니다. 예를 들어 1부터 1000까지의 고객 ID가 하나의 샤드에 저장되고 1001부터 2000까지의 고객 ID가 다른 샤드에 저장될 수 있습니다. 이 접근 방식은 범위 작업과 관련된 쿼리를 단순화하지만 데이터가 범위 전체에 균일하게 분산되지 않으면 고르지 않은 데이터 분포와 핫스팟이 발생할 수 있습니다.
디렉터리 기반 샤딩: 이 방법은 조회 테이블을 사용하여 키를 해당 샤드에 매핑합니다. 뛰어난 유연성을 제공하므로 샤드를 쉽게 추가하거나 제거하고 간단하게 다시 샤딩할 수 있습니다. 그러나 조회 서비스에 잠재적인 단일 실패 지점이 발생하고 적절하게 관리되지 않으면 성능 병목 현상이 발생할 수 있습니다.
지리적 샤딩: 지리적 위치를 기반으로 데이터를 배포합니다. 대기 시간을 줄이고 현지 데이터 규정 준수를 향상시키기 위해 데이터를 사용자에게 물리적으로 더 가깝게 유지하는 것을 목표로 합니다. 이 전략은 서로 다른 지역의 사용자에게 서비스를 제공하는 글로벌 애플리케이션에 도움이 됩니다. 지역 간 데이터 분산의 균형을 맞추고 효율적인 액세스를 보장하려면 세심한 관리가 필요합니다.
고객 기반 샤딩: 각 고객이 잠재적으로 매우 다른 데이터 크기와 사용 패턴을 가지고 있는 다중 테넌트 아키텍처에서는 고객 기반 샤딩을 사용할 수 있습니다. 여기에는 고객 또는 고객 그룹별로 샤드를 할당하고 성능 및 격리를 최적화하는 작업이 포함됩니다. 대규모 고객에게 서비스를 제공하기 위한 높은 수준의 맞춤화 기능을 제공하지만 샤드 전체에서 리소스를 효율적으로 활용하는 데 어려움을 겪을 수 있습니다.
샤딩 시 모든 DB 서버는 구조적으로 동일해야 하며, 데이터 기록은 샤딩된 DB에 나누어져 있어야 한다.
수직 분할
테이블을 열 또는 테이블별로 나누고 자주 액세스하는 열과 덜 사용되는 열을 분리하여 액세스 시간과 캐시 효율성을 최적화합니다. 따라서 각 테이블을 별도의 데이터베이스에 배치할 수 있습니다.
그러나 데이터베이스 샤딩은 어렵습니다. 데이터 이동, 쿼리 매핑 등 많은 사항을 조정해야 하기 때문에 시간이 많이 걸립니다. 그리고 비용도 듭니다.
DB에 문제가 발생할 때 좋은 사례는 무엇입니까?
수직 확장 — 먼저 DB 서버(CPU, 메모리 등)에 더 많은 성능을 추가합니다.
복제 — DB의 읽기 전용 복제본을 생성합니다. 이렇게 하면 읽기 성능을 향상시키는 데 도움이 되지만 캐싱도 있어야 합니다.
이 모든 것이 도움이 되지 않으면 파티셔닝을 수행하십시오 .
???? 특정 쿼리에 대한 확장성과 성능이 중요한 대규모 테이블에는 수평 분할을 사용합니다.
???? 열이 많은 테이블이 있지만 모든 테이블이 자주 함께 액세스되지는 않는 경우 수직 분할을 사용합니다.