이 페이지에서는 Spanner에서 기본 키를 사용하는 방법을 설명하고 다음 사용 사례에 대한 기본 키 마이그레이션 전략을 제공합니다.
- UUID 키 데이터베이스 마이그레이션
- 순차적 키로 단일 인스턴스 데이터베이스 마이그레이션
- 라이브 컷오버 지원으로 순차적 키 데이터베이스 마이그레이션
- 애플리케이션 로직 종속 항목으로 순차적 키 데이터베이스 마이그레이션
기본 키에 대한 일반적인 접근 방식은 자동 증가 숫자와 같은 서로게이트 키를 사용하는 것입니다. 이러한 기본 키는 비즈니스 로직이 변경되더라도 현재 및 미래에 키를 최적화할 수 있는 유연성을 제공합니다. 낮은 볼륨의 단일 인스턴스 데이터베이스에서는 순차적 키의 성능이 좋습니다. 하지만 분산 시스템에서는 순차적 키가 잘 확장되지 않습니다.
Spanner의 순차적 기본 키
Spanner에서 모든 테이블에는 테이블의 하나 이상의 열로 구성된 기본 키가 있습니다. 테이블의 기본 키는 테이블의 각 행을 고유하게 식별합니다. Spanner는 기본 키를 사용해서 Spanner 인스턴스의 컴퓨팅 노드에서 분할이라고 부르는 행 그룹을 분산합니다. 이를 범위 샤딩이라고 부르며 이를 통해 Spanner가 쿼리를 동시에 로드하고 확장할 수 있습니다.
순차적으로 자동으로 증가하는 키와 같이 해당 값이 밀접한 유사성을 갖는 기본 키가 행에 포함된 경우 이러한 행은 일반적으로 동일한 분할에 함께 저장됩니다. 그 결과 분할이 모든 사용 가능한 컴퓨팅 및 메모리 리소스를 사용할 수 있는 핫스팟이 생성될 수 있습니다. 핫스팟은 지연 시간 증가를 가져오고 시간 초과 및 트랜잭션 중단으로 이어질 수 있습니다.
Spanner의 확장성을 활용하고 핫스팟을 방지하기 위해 Spanner는 자동으로 증가하는 기본 키에 대한 대안으로 내장 솔루션을 제공합니다.
기본 키 권장사항
Spanner에서 기본 키에 대한 기본 권장사항은 범용 고유 식별자 버전 4(UUIDv4) 값을 사용하는 것입니다. UUID는 122비트의 랜덤 데이터를 사용하는 128비트 식별자입니다. UUIDv4 값은 대량의 값 범위를 포함하며 생성된 위치에 관계없이 고유합니다. 따라서 Spanner에서 핫스팟을 일으키지 않는 기본 키에 대한 적절한 대안이 될 수 있습니다.
정수 기본 키를 사용하면 저장 공간과 애플리케이션 변경에 따른 복잡성을 줄일 수 있습니다. 양의 비트 반전 시퀀스를 사용하여 고유한 기본 키 값을 생성할 수 있으므로, 양의 64비트 정수 범위에 고르게 분포되도록 하는 데 도움이 됩니다.
핫스팟 방지를 위한 기본 키 선택에 대한 자세한 내용은 스키마 디자인 권장사항을 참조하세요.
마이그레이션 전략
애플리케이션 사용 사례 및 요구에 따라 기본 키 마이그레이션 전략을 배포할 수 있습니다. 이러한 각 마이그레이션 전략은 다음 효과를 제공합니다.
- 마이그레이션된 기본 키의 충실도 및 정확도를 보장합니다.
- 유형 또는 기본 키 값 변경과 같은 다운스트림 애플리케이션 변경사항을 최소화합니다.
- 성능 및 확장성을 위해 Spanner 권장사항을 구현합니다.
- Spanner는 새 데이터의 생성 방법만 변경하고 기존 데이터에 영향을 주지 않습니다.
UUID 키 데이터베이스 마이그레이션
UUID 기본 키를 사용하는 데이터베이스에서 Spanner로 마이그레이션한다고 가정해 보세요. 소스 데이터베이스에서 기존 UUID 키를 문자열로 구성하고 Spanner에 이를 있는 그대로 가져옵니다. UUID 값, 특히 v4는 생성된 위치에 관계없이 실제로 고유합니다.
Spanner에서 GENERATE_UUID()
함수(GoogleSQL, PostgreSQL)를 사용하여 UUID 키 데이터베이스를 마이그레이션합니다.
UUID 키 데이터베이스 마이그레이션에 대한 자세한 내용은 UUID 키 열 마이그레이션을 참조하세요.
순차적 키가 포함된 단일 인스턴스 데이터베이스 마이그레이션
MySQL의 AUTO_INCREMENT
, PostgreSQL의 SERIAL
, SQL Server 또는 Oracle의 표준 IDENTITY
유형과 같이 순차적 단조 키를 사용하는 단일 인스턴스 데이터베이스에서 마이그레이션한다고 가정해 보세요.
기존 키 범위의 값을 건너뛰고 새로운 비트 반전 키를 생성하도록 Spanner SEQUENCE
객체를 구성합니다. Spanner SEQUENCE
객체에서 생성된 비트 반전 키는 항상 0보다 크며, 양의 64비트 정수 범위에서 균일하게 분산됩니다.
순차적 키가 있는 데이터베이스 마이그레이션에 대한 자세한 내용은 자동 생성된 순차적 기본 키 마이그레이션을 참조하세요.
실시간 컷오버 지원이 포함된 순차적 키 데이터베이스 마이그레이션
순차적 단조 키를 사용하는 단일 인스턴스 데이터베이스에서 Spanner로 마이그레이션 중이고 데이터베이스 시스템 사이의 실시간 컷오버를 수행할 때와 같이 복제 시나리오를 지원한다고 가정해 보세요.
소스 데이터베이스에서 기존 키의 전체 값 범위를 건너뛰고 Spanner에서 새로운 비트 반전 키를 생성하도록 Spanner SEQUENCE
객체를 구성합니다. Spanner SEQUENCE
객체에서 생성된 비트 반전 키는 항상 0보다 크지만 정렬되지 않습니다
실시간 컷오버 지원이 포함된 데이터베이스 마이그레이션에 대한 자세한 내용은 Spanner 및 소스 데이터베이스 사용을 참조하세요.
애플리케이션 로직 종속 항목이 포함된 순차적 키 데이터베이스 마이그레이션
순차적 단조 키를 사용하는 데이터베이스에서 마이그레이션하는 중이고 해당 애플리케이션 로직이 최신 레코드를 추적하거나 새로 생성된 데이터를 특정 시퀀스로 정렬하기 위해 기본 키에 의존한다고 가정해 보세요.
샤드 ID 또는 해시와 같은 균일하게 분포된 값을 첫 번째 구성요소로 조합하고 순차적 숫자를 두 번째 구성요소로 조합하는 복합 키를 만듭니다. 이렇게 하면 대규모 핫스팟을 일으키지 않고 정렬된 키 값이 보존됩니다.
애플리케이션 로직 종속 항목을 사용하여 순차적 키 데이터베이스를 마이그레이션하는 방법은 고유 기본 키 마이그레이션을 참조하세요.
다음 단계
- 자세한 마이그레이션 워크플로를 보려면 기본 키 마이그레이션을 참조하세요.