다음을 통해 공유


Azure Database DB for PostgreSQL의 크기 조정에 대한 기본 개념

적용 대상: Azure Cosmos DB for PostgreSQL(PostgreSQL에 대한 Citus 데이터베이스 확장 기반)

새 앱을 빌드하는 단계를 조사하기 전에 관련된 용어와 개념에 대한 간략한 개요를 확인하는 것이 좋습니다.

아키텍처 개요

Azure Cosmos DB for PostgreSQL을 사용하면 클러스터의 여러 컴퓨터에 테이블 및/또는 스키마를 배포하고 일반 PostgreSQL을 쿼리하는 것과 동일하게 투명하게 쿼리할 수 있습니다.

작업자 노드에 테이블을 분할하는 코디네이터 노드의 다이어그램

Azure Cosmos DB for PostgreSQL 아키텍처에는 여러 종류의 노드가 있습니다.

  • 코디네이터 노드는 분산 테이블 메타데이터를 저장하고 분산 계획을 담당합니다.
  • 이와 대조적으로 작업자 노드는 실제 데이터와 메타데이터를 저장하고 계산을 수행합니다.
  • 코디네이터와 작업자는 모두 citus 확장이 로드된 일반 PostgreSQL 데이터베이스입니다.

위 다이어그램의 campaigns와 같은 일반 PostgreSQL 테이블을 배포하려면 create_distributed_table()이라는 명령을 실행합니다. 이 명령을 실행하면 Azure Cosmos DB for PostgreSQL은 작업자 노드에서 테이블에 대한 분할을 투명하게 만듭니다. 다이어그램에서 분할된 데이터베이스는 파란색 상자로 표시됩니다.

일반 PostgreSQL 스키마를 배포하려면 citus_schema_distribute() 명령을 실행합니다. 이 명령을 실행하면 Azure Cosmos DB for PostgreSQL은 이러한 스키마의 테이블을 클러스터 노드 간에 하나의 단위로 이동할 수 있는 단일 분할된 공동 배치 테이블로 투명하게 변환합니다.

참고 항목

작업자 노드가 없는 클러스터에서 분산 테이블의 분할은 코디네이터 노드에 있습니다.

분할된 데이터베이스는 데이터 조각을 포함하는 일반(그러나 특별히 명명된) PostgreSQL 테이블입니다. 이 예에서는 campaignscompany_id로 배포했기 때문에 분할된 데이터베이스에는 여러 회사의 캠페인이 서로 다른 분할된 데이터베이스에 할당된 캠페인이 있습니다.

배포 열(분할 키라고도 함)

create_distributed_table()은 Azure Cosmos DB for PostgreSQL에서 테이블을 배포하고 여러 머신에서 리소스를 사용하기 위해 제공하는 매직 함수입니다.

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

위의 두 번째 인수는 테이블에서 열을 배포 열로 선택합니다. 기본 PostgreSQL 형식이 있는 모든 열이 될 수 있습니다(정수와 텍스트가 가장 일반적임). 배포 열의 값은 어떤 행이 어떤 분할에 들어갈지 결정하므로 배포 열을 분할 키라고도 합니다.

Azure Cosmos DB for PostgreSQL은 분할 키 사용에 따라 쿼리를 실행하는 방법을 결정합니다.

쿼리에 포함되는 항목 실행되는 위치
하나의 분할 키만 분할된 데이터베이스를 보유하는 작업자 노드에서
여러 분할 키 여러 노드에서 병렬 처리

분할 키의 선택은 애플리케이션의 성능과 확장성을 결정합니다.

  • 분할 키당 불균등한 데이터 분포(데이터 기울이기라고도 함)는 성능에 최적화되지 않습니다. 예를 들어 단일 값이 데이터의 50%를 나타내는 열을 선택하지 마세요.
  • 카디널리티가 낮은 분할 키는 확장성에 영향을 줄 수 있습니다. 고유한 키 값이 있는 만큼만 분할을 사용할 수 있습니다. 수백에서 수천 개의 카디널리티가 있는 키를 선택합니다.
  • 분할 키가 다른 두 개의 큰 테이블을 조인하는 것은 속도가 느릴 수 있습니다. 큰 테이블에서 공통 분할 키를 선택합니다. 공동 배치에서 자세히 알아봅니다.

공동 배치

분할 키와 밀접하게 관련된 또 다른 개념은 공동 배치입니다. 동일한 배포 열 값으로 분할된 테이블은 공동 배치됩니다. 공동 배치된 테이블의 분할은 동일한 작업자에 함께 저장됩니다.

다음은 동일한 키(site_id)로 분할된 두 테이블입니다. 두 테이블은 공동 배치되어 있습니다.

site_id로 공동 배치된 http_request 및 http_request_1min 테이블의 다이어그램

Azure Cosmos DB for PostgreSQL을 사용하면 두 테이블에서 일치하는 site_id 값을 가진 행이 동일한 작업자 노드에 저장됩니다. 두 테이블 모두에서 site_id=1인 행이 작업자 1에 저장되어 있음을 알 수 있습니다. 다른 사이트 ID의 경우도 마찬가지입니다.

공동 배치는 이러한 테이블에서 조인을 최적화하는 데 도움이 됩니다. site_id에서 두 테이블을 조인하면 Azure Cosmos DB for PostgreSQL이 노드 간에 데이터를 섞지 않고 작업자 노드에서 로컬로 조인을 수행할 수 있습니다.

분산 스키마 내의 테이블은 항상 서로 같은 위치에 배치됩니다.

다음 단계