중요합니다
Azure Cosmos DB for PostgreSQL은 더 이상 새 프로젝트에 지원되지 않습니다. 새 프로젝트에는 이 서비스를 사용하지 마세요. 대신 다음 두 서비스 중 하나를 사용합니다.
99.999% SLA(가용성 서비스 수준 약정), 인스턴트 자동 크기 조정 및 여러 지역에서 자동 장애 조치(failover)를 사용하는 대규모 시나리오용으로 설계된 분산 데이터베이스 솔루션에는 NoSQL용 Azure Cosmos DB를 사용합니다.
오픈 소스 Citus 확장을 사용하여 분할된 PostgreSQL용 Azure Database for PostgreSQL의 탄력적 클러스터 기능을 사용합니다.
새 앱을 빌드하는 단계를 조사하기 전에 관련된 용어와 개념에 대한 간략한 개요를 확인하는 것이 좋습니다.
아키텍처 개요
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 테이블입니다. 이 예에서는 campaigns를 company_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)로 분할된 두 테이블입니다. 두 테이블은 공동 배치되어 있습니다.
Azure Cosmos DB for PostgreSQL을 사용하면 두 테이블에서 일치하는 site_id 값을 가진 행이 동일한 작업자 노드에 저장됩니다. 두 테이블 모두에서 site_id=1인 행이 작업자 1에 저장되어 있음을 알 수 있습니다. 다른 사이트 ID의 경우도 마찬가지입니다.
공동 배치는 이러한 테이블에서 조인을 최적화하는 데 도움이 됩니다.
site_id에서 두 테이블을 조인하면 Azure Cosmos DB for PostgreSQL이 노드 간에 데이터를 섞지 않고 작업자 노드에서 로컬로 조인을 수행할 수 있습니다.
분산 스키마 내의 테이블은 항상 서로 같은 위치에 배치됩니다.