기술(IT)

데이터베이스 파티셔닝 샤드(Shard) 기술

2019. 11. 14.
728x90

데이터베이스 샤드는 데이터베이스 검색 엔진에 있는 데이터의 수평 분할이다. 각각의 개별 파티션을 샤드 또는 데이터베이스 샤드라고 한다. 각 샤드는 부하를 분산시키기 위해 별도의 데이터베이스 서버 인스턴스에 보관된다. 각 샤드는 이 데이터 서브셋의 단일 소스로 작용한다. 데이터베이스 내의 일부 데이터는 모든 면에 남아 있지만, 일부는 한 면에만 나타난다. 

데이터베이스 아키텍처
수평 분할은 정규화와 수직 분할이 서로 다른 익스텐트에 대해 열로 분할되는 것이 아니라, 데이터베이스 테이블의 행을 개별적으로 유지하는 데이터베이스 설계 원칙이다. 각 파티션은 샤드의 일부를 형성하며, 이는 다시 별도의 데이터베이스 서버 또는 물리적 위치에 위치할 수 있다. 수평 분할 접근법에는 수많은 이점이 있다. 테이블이 여러 서버로 분할되어 분산되기 때문에, 각 데이터베이스에서 각 테이블의 행의 총 수가 감소한다. 이렇게 하면 인덱스 크기가 줄어들어 일반적으로 검색 성능이 향상된다. 데이터베이스 샤드는 별도의 하드웨어에 배치될 수 있고, 여러 대의 시스템에 배치될 수 있다. 이를 통해 많은 기계에 걸쳐 데이터베이스를 배포할 수 있어 성능이 크게 향상된다. 또한 데이터베이스 샤드가 데이터의 실제 분할을 기반으로 하는 경우 적절한 샤드 멤버십을 쉽고 자동으로 추론하고 관련 샤드만 쿼리할 수 있다. 서버 간의 상호 연결에 대한 의존도 증가된다. 데이터나 인덱스는 종종 한 가지 방법으로만 샤딩되므로, 어떤 검색은 최적인 것이고, 어떤 검색은 느리거나 불가능한 것이다. 서버 집합의 보다 복잡한 고장 모드에 의한 일관성 및 내구성의 문제, 이는 종종 시스템이 공유기 간 일관성 또는 내구성에 대해 보장하지 않는 결과를 초래한다. 실제로, 샤딩은 복잡하다. 비록 핸드코딩에 의해 오랫동안 행해졌지만, 이것은 종종 융통성이 없다. 그것에 대한 코드 지원을 추가하는 것과 별도로 셰이딩될 후보들을 식별하는 것 모두, 자동적으로 셰이딩을 지원하고자 하는 욕구가 있다. 일관된 해싱은 여러 개의 소규모 서비스와 서버에 큰 부하를 분산시키기 위해 샤딩에 사용되는 기법이다.  여러 서버 간에 부하를 분리하기 위해 분산 컴퓨팅을 사용하는 경우 샤드 접근법도 유용할 수 있다.

수평 분할과 비교한 쉐이드
수평 분할은 일반적으로 스키마와 데이터베이스 서버의 단일 인스턴스 내에서 한 개 이상의 테이블을 행으로 분할한다. 먼저 인덱스를 검색할 필요 없이 특정 행이 발견될 파티션을 식별하는 분명하고 강력하며 암묵적인 방법이 있다면 인덱스 크기를 줄임으로써 이점을 제공할 수 있다. 샤딩은 이를 넘어 문제가 있는 테이블을 동일한 방식으로 분할하지만 스키마의 여러 인스턴스에 걸쳐 분할한다. 분명한 장점은 분할된 큰 테이블에 대한 검색 로드가 동일한 논리 서버에 있는 여러 인덱스가 아니라 이제 여러 서버로 분할될 수 있다는 것이다. 여러 개의 분리된 인스턴스로 파형을 분할하려면 단순한 수평 파티셔닝 이상의 것이 필요하다. 데이터베이스를 조회할 때 단순한 치수 표를 검색하기 위해 두 인스턴스를 쿼리해야 하는 경우, 기대했던 효율성 증가는 상실될 것이다. 분할을 넘어, 샤딩은 큰 분할 가능한 테이블을 서버에 분산시키는 반면, 작은 테이블은 완전한 단위로 복제된다. 이 때문에 샤딩은 공유 무 아키텍처와 관련이 있다. 한 번 샤딩하면, 각 샤드는 완전히 별개의 논리적 스키마 인스턴스, 물리적 데이터베이스 서버에서 존재하게된다.  이를 통해 여러 서버에 대한 복제가 쉬워진다. 또한 데이터 센터 간의 통신 링크가 병목 현상이 될 수 있는 애플리케이션의 전 세계적인 배포에도 유용하다. 또한 스키마 인스턴스 간에 일부 통지 및 복제 메커니즘이 필요하므로 분할되지 않은 테이블은 응용프로그램이 요구하는 대로 밀접하게 동기화된다. 이는 샤드 시스템 아키텍처에서 복잡한 선택이다. 접근방식은 이러한 효과적인 읽기 전용에서 동적 복제된 테이블에 이르기까지 다양하다. 데이터베이스 맥락에서, 대부분의 사람들은 공유라는 용어가 두 가지 소스 중 하나에서 파생되었을 가능성이 높다는 것을 알고 있다.  공유라는 용어는 데이터베이스 시스템 전체에서 중복 하드웨어의 배치와 사용을 의미한다.

문제점
데이터베이스 테이블을 로컬로 최적화하기 전에 공유하면 복잡성이 조기에 발생한다. 샤딩은 최적화를 위한 다른 모든 옵션이 불충분한 경우에만 사용해야 한다. 데이터베이스 샤딩의 복잡성은 다음과 같은 잠재적인 문제를 야기한다. SQL의 복잡성 증가, 개발자가 샤딩 논리를 처리하기 위해 더 복잡한 SQL을 작성해야 하기 때문에 버그 증가한다. 샤딩은 복잡성을 야기하여 분할, 균형, 좌표 및 무결성을 보장하는 샤딩 소프트웨어는 실패할 수 있다. 단일 장애 지점으로 네트워크,하드웨어,시스템 문제로 인해 한 샤드가 손상되면 테이블 전체에 장애가 발생한다. 페일오버 서버 자체에는 데이터베이스 셰드의 함대 복사본이 있어야 한다. 개별 쉐이드의 데이터베이스 백업은 다른 쉐이드의 백업과 조정되어야 한다. 많은 데이터를 데이터베이스 질의에서 제외하기 위해 효율적으로 테스트할 수 있는 소형 형태로 큰 블록을 요약하여 운영한다. 이러한 테스트는 각 비교에 대한 큰 데이터 블록을 제외한다. 큰 블록을 작은 돌출부로 표현하고 많은 블록을 제거함으로써 데이터 볼륨을 초기에 줄임으로써, 데이터베이스 노드가 연속적으로 검사해야 하는 상세 데이터의 양을 상당히 감소시킨다. 대형 데이터베이스의 데이터 저장소는 계층화되고 청킹되며, 테이블 저장소는 블록으로 배열된다. 각 블록은 각 청크에 약 1MB를 포함하며 디스크 기반 스토리지 계층에서 특정 블록을 요청하여 검색한다. 이 위에 있는 경량 인 메모리 요약 계층이다. 지수의 각 튜플은 포함된 데이터의 범위, 즉 최소값과 최대값에 대해 한 블록을 요약한다

LIST

댓글

추천 글