분산형 데이터베이스

  • 데이터를 한 위치가 아닌 여러 위치에 저장하는 데이터베이스
  • 이는 여러 서버 또는 개별 노드로 구성된 컴퓨터 클러스터에 데이터를 배치하는 것을 의미한다. 이러한 노드는 지리적으로 분리되어 있을 수 있으며, 클라우드 데이터베이스 내의 물리적 컴퓨터 또는 가상 머신일 수 있다.

유형

  • 동종 분산 데이터베이스 : 동일한 데이터를 저장, 데이터 모델 사용, 운영 체제에서 작동, 분산 데이터 베이스 관리 시스템 공유. 모든 노드의 유사성으로 인해 중복성을 통해 중요한 데이터 보호를 제공하고 관리를 단순화한다.

  • 이기종 분산 데이터베이스 : 서로 다른 데이터를 저장, 운영 체제에서 작동, 데이터 스키마를 포함한다. 혹은, 서로 다른 사이트가 서로의 존재를 인식하지 못할 수 도 있다. 관리하기가 더 복잡하지만 이기종 분산 데이터베이스는 동종 분산 데이터베이스보다 데이터 모델, 스키마 선택 및 저장할 수 있는 데이터 유형 측면에서 더 큰 유연성을 제공한다.

주로 사용되는 곳

  • 대규모 데이터와 트래픽을 처리해야 하는 애플리케이션 : 소셜 미디어 플랫폼, 전자 상거래 사이트 등 수백만 명의 동시 사용자 및 트랜잭션을 관리해야 하는 경우. 분산 데이터베이스는 많은 노드를 추가하여 수평적으로 확장할 수 있도록 지원한다.

  • 높은 가용성과 장애 허용이 필수적인 환경 : 금융 서비스, 의료 시스템, 결제 처리 시스템 등 거의 지속적인 가동 시간이 필요한 경우.

노드

노드는 분산 데이터베이스 시스템 내에 있는 개별 서버 또는 컴퓨터다(예: 물리적 구성 요소를 공유하지 않는 컴퓨터, 가상 머신, 서버).

각 노드는 데이터를 저장하고 분산 데이터베이스 관리 시스템 소프트웨어에서 실행된다.

결함 허용 (Fault Tolerance)

하나 이상의 노드 혹은 서버의 실패에도 계속해서 정상적으로 동작할 수 있는 능력을 의미한다. 시스템의 안정성과 가용성을 보장하며, 장애가 발생했을 때에도 서비스의 중단을 최소화하는 목표를 가진다.

데이터 복제

서로 다른 노드 혹은 서버, 사이트에 동일한 데이터의 복사본을 만들고 유지하는 프로세스이다. 이렇게 되면, 하나의 노드 혹은 서버에서 장애가 발생하더라도, 다른 쪽에서 동일한 데이터를 제공할 수 있어 가용성이 증가한다.

  • 전체 복제: 전체 복제에서 전체 데이터베이스의 완전한 복사본이 분산 데이터베이스 시스템 내의 모든 사이트로 전송된다.
  • 부분 복제: 데이터베이스의 특정 부분만 필요한 경우가 있으므로 데이터베이스의 정의된 부분이 선택한 그룹에 복제된다.

데이터 분산(파티셔닝)

파티셔닝은 대규모 데이터 세트를 더 작고 관리하기 쉬운 부분으로 분할하는 기술로써, 분산 데이터베이스에서 효율성, 보안 및 최적의 사용자 액세스에 매우 중요하다.

  • 수평 파티셔닝

    • 데이터 테이블을 행으로 분할하는 것을 의미.
    • 전체 데이터 세트를 스캔하는 대신 특정 파티션으로 쿼리를 보낼 수 있으므로 효율적인 부하 분산과 향상된 쿼리 성능을 가능하게 한다.
  • 수직 파티셔닝

    • 데이터 테이블을 열로 분할한다.
    • 서로 다른 애플리케이션이나 사용자가 데이터의 서로 다른 속성에 접근할 때 특히 유용하다. 자주 접근하는 열을 격리함으로써 수직 파티셔닝은 성능을 향상시키고 네트워크를 통해 전송되는 데이터 양을 줄일 수 있다.
  • 해시 파티셔닝

    • 지정된 키 속성에 해시 함수를 적용하여 주어진 레코드를 보유할 파티션을 결정한다.
    • 파티션 간에 데이터를 고르게 분산시켜 하나의 파티션이 불균형적으로 많은 트래픽을 수신하는 가능성을 최소화하는 것을 목표로 한다.

부하 분산

사용자 요청 및 쿼리를 데이터베이스 노드에 고르게 분산하는 기술. 이는 성능을 향상시킬 뿐만 아니라 한 노드의 오류가 다른 노드에 과부하를 일으키지 않도록 한다.

쿼리가 수신되면 부하 분산 장치는 요청을 평가하고 응답하는 데 가장 적합한 노드를 결정한다. 이 평가 중에 근접성, 현재 부하 및 기타 미리 결정된 시스템 규칙과 같은 요소가 고려된다. 이 평가 및 할당은 시스템 과부하 및 시스템 비효율성을 방지하여 사용자 대기 시간을 줄이는 데 도움이 된다.

데이터 요청

분산 요청

단일 SQL문(명령문) 으로 둘 이상의 노드(데이터베이스) 를 참조할 수 있는 하는 분산 데이터베이스의 기능.

라우팅 (쿼리 라우팅)

직접 라우팅 (Direct Routing)

  • 사용자가 요청에 샤딩 키를 제공하면, 해당 키를 기반으로 요청이 특정 샤드로 전달된다.
  • 중간 지점을 거치지 않기에 처리 속도가 빠르다.
  • 샤딩 키가 명확히 정의된 경우, 특정 샤드에서만 데이터를 조회하거나 수정할 경우에 사용된다.
  • Oracle 의 경우, 캐시를 통해 성능을 최적화 한다.

프록시 라우팅 (Proxy Routing)

  • 샤딩 키가 없거나 여러 샤드(혹은 노드) 에서 데이터를 가져와야 하는 경우 사용된다.
  • 여러 노드에서 데이터를 가져와야 하는 경우.
  • 요청과 결과가 쿼리 코디네이터를 거쳐야 하기 때문에 추가적인 네트워크 및 처리 오버헤드가 발생하여, 직접 라우팅보다 성능이 낮다.
  • 쿼리 코디네이터가 중간 역할을 한다.

쿼리 코디네이터 는 클라이언트로부터 받은 SQL 쿼리를 분석하여 어떤 데이터가 필요한지, 어떤 연산이 수행되어야 하는지 파악하고, 최종적으로 쿼리가 효율적으로 실행되기위한 계획을 수립한다. 요청된 데이터가 어느 노드(혹은 샤드)에 저장되어 있는지 결정한다.

  • 처리 과정
    1. 애플리케이션은 샤딩 키 없는 SQL 쿼리를 생성.
    2. 요청은 노드(샤드) 들이 아닌, 쿼리 코디네이터로 전달된다.
    3. 쿼리 코디네이터는 메타데이터를 참조하여 관련된 모든 노드(샤드) 를 식별하고 쿼리를 병렬로 실행.
    4. 각 샤드에서 처리된 결과가 코디네이터로 반환되고, 최종 결과가 애플리케이션으로 전달된다.

데이터 동기화

  • 각 노드가 독립적으로 작동할 수 있으므로, 한 노드에서 발생한 데이터 변경 사항이 다른 노드에 반영되지 않으면 데이터 불일치가 발생할 수 있음.
  • 두 사용자가 서로 다른 노드에서 동시에 동일한 데이터를 수정하면 시스템은 우선순위를 결정하거나 변경 사항을 병합해야 함.

방식

  • 동기적 동기화 (Synchronous Synchronization) : 모든 노드가 변경 사항을 확인하고 업데이트를 완료한 뒤 트랜잭션이 완료된다. 높은 일관성을 제공하기에, 중요한 금융 시스템이나 의료 데이터베이스와 같은 환경에서 적합하다. 네트워크 지연과 성능 저하가 발생할 수 있다.

  • 비동기적 동기화 (Asynchronous Synchronization) : 변경 사항이 다른 노드로 전송되지만 즉시 반영되지 않고 나중에 처리된다. 성능이 뛰어나며 대규모 시스템에서 확장성이 좋다. 일시적인 데이터 불일치를 허용하므로, 강력한 일관성이 필요한 경우에는 적합하지 않다.