확장하기 위해 기존 데이터베이스 마이그레이션

적용 대상:Azure SQL Database

도구(예: Elastic Database 클라이언트 라이브러리)를 사용하여 기존의 확장되었으며 분할된 데이터베이스를 쉽게 관리합니다. 기존 데이터베이스 집합을 먼저 변환하여 분할 맵 관리자를 사용합니다.

개요

기존의 분할된 데이터베이스를 마이그레이션하려면:

  1. 분할 맵 관리자 데이터베이스를 준비합니다.
  2. 분할 맵을 만듭니다.
  3. 개별 분할을 준비합니다.
  4. 분할 맵에 매핑을 추가합니다.

이러한 기술은 .NET Framework 클라이언트 라이브러리 또는 Azure SQL Database - Elastic Database 도구 스크립트에 있는 PowerShell 스크립트를 사용하여 구현할 수 있습니다. 이 예제에서는 PowerShell 스크립트를 사용합니다.

ShardMapManager에 대한 자세한 내용은 분할된 데이터베이스 맵 관리를 참조하세요. 탄력적 데이터베이스 도구에 대한 개요는 기능 개요를 참조하세요.

분할 맵 관리자 데이터베이스 준비

분할 맵 관리자는 확장된 데이터베이스를 관리하기 위한 데이터를 포함하는 특수 데이터베이스입니다. 기존 데이터베이스를 사용하거나 새 데이터베이스를 만들 수 있습니다. 분할 맵 관리자 역할을 하는 데이터베이스는 분할과 동일한 데이터베이스일 수 없습니다. PowerShell 스크립트는 사용자를 대신해 데이터베이스를 만들지 않습니다.

1단계: 분할 맵 관리자 만들기

# Create a shard map manager
New-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'
#<server_name> and <smm_db_name> are the server name and database name
# for the new or existing database that should be used for storing
# tenant-database mapping information.

분할 맵 관리자를 검색하는 방법

만든 후 이 cmdlet을 사용하여 분할 맵 관리자를 검색할 수 있습니다. 이 단계는 ShardMapManager 개체를 사용해야 할 때마다 필요합니다.

# Try to get a reference to the Shard Map Manager  
$ShardMapManager = Get-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'

2단계: 분할 맵 만들기

만들 분할된 데이터베이스 맵의 종류를 선택합니다. 데이터베이스 아키텍처에 따라 선택합니다.

  1. 데이터베이스당 단일 테넌트(용어는 용어집을 참조하세요.)
  2. 데이터베이스당 다중 테넌트(두 가지 형식):
    1. 목록 매핑
    2. 범위 매핑

단일 테넌트 모델은 목록 매핑 분할 맵을 만듭니다. 단일 테넌트 모델은 테넌트당 하나의 데이터베이스를 할당합니다. 이는 관리를 단순화하므로 SaaS 개발자에게 효과적인 모델입니다.

List mapping

다중 테넌트 모델은 개별 데이터베이스에 여러 테넌트를 할당합니다. 여러 데이터베이스에 테넌트 그룹을 분산시킬 수도 있습니다. 각 테넌트에 데이터 요구가 적다고 예상되는 경우 이 모델을 사용합니다. 이 모델에서 범위 매핑을 사용하여 데이터베이스에 테넌트의 범위를 할당합니다.

Range mapping

여러 테넌트를 개별 데이터베이스에 할당하는 목록 매핑을 사용하여 다중 테넌트 데이터베이스 모델을 구현할 수도 있습니다. 예를 들어 DB1은 테넌트 ID 1과 5에 대한 정보를 저장하는 데 사용하고 DB2는 테넌트 7과 테넌트 10의 데이터를 저장합니다.

Multiple tenants on single DB

선택한 옵션에 따라 다음 옵션 중 하나를 선택합니다.

옵션 1: 목록 매핑을 위해 분할 맵 만들기

ShardMapManager 개체를 사용하여 분할 맵을 만듭니다.

# $ShardMapManager is the shard map manager object
$ShardMap = New-ListShardMap -KeyType $([int]) -ListShardMapName 'ListShardMap' -ShardMapManager $ShardMapManager

옵션 2: 범위 매핑을 위해 분할 맵 만들기

이 매핑 패턴을 활용하려면 테넌트 ID 값이 연속 범위여야 하며, 데이터베이스를 만들 때 범위를 건너뛰어 범위에 간격을 두는 것이 허용됩니다.

# $ShardMapManager is the shard map manager object
# 'RangeShardMap' is the unique identifier for the range shard map.  
$ShardMap = New-RangeShardMap -KeyType $([int]) -RangeShardMapName 'RangeShardMap' -ShardMapManager $ShardMapManager

옵션 3: 개별 데이터베이스에 대한 매핑 나열

이 패턴을 설정하려면 2단계의 옵션 1에 보이는 것처럼 목록 맵을 만들어야 합니다.

3단계: 개별 분할 준비

각 분할(데이터베이스)을 분할 맵 관리자에 추가합니다. 이렇게 매핑 정보를 저장하기 위한 개별 데이터베이스를 준비합니다. 각 분할에서 이 메서드를 실행합니다.

Add-Shard -ShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.

4단계: 매핑 추가

매핑 추가는 만든 분할 맵의 종류에 따라 달라집니다. 목록 맵을 만든 경우 목록 매핑을 추가합니다. 범위 맵을 만든 경우 범위 매핑을 추가합니다.

옵션 1: 목록 매핑을 위해 데이터 매핑

각 테넌트를 위해 목록 매핑을 추가하여 데이터를 매핑합니다.

# Create the mappings and associate it with the new shards
Add-ListMapping -KeyType $([int]) -ListPoint '<tenant_id>' -ListShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

옵션 2: 범위 매핑을 위해 데이터 매핑

모든 테넌트 ID 범위에 범위 매핑을 추가합니다. 데이터베이스 연결:

# Create the mappings and associate it with the new shards
Add-RangeMapping -KeyType $([int]) -RangeHigh '5' -RangeLow '1' -RangeShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

4단계의 옵션 3: 개별 데이터베이스의 여러 테넌트에 데이터 매핑

각 테넌트에 대해 Add-ListMapping(옵션 1)을 실행합니다.

매핑 확인

기존 분할 및 이러한 분할과 연결된 매핑에 대한 정보는 다음 명령을 사용하여 쿼리할 수 있습니다.

# List the shards and mappings
Get-Shards -ShardMap $ShardMap
Get-Mappings -ShardMap $ShardMap

요약

설치를 완료하면 Elastic Database 클라이언트 라이브러리 사용을 시작할 수 있습니다. 데이터 종속 라우팅다중 분할 쿼리를 사용할 수도 있습니다.

다음 단계

Azure 탄력적 데이터베이스 도구 스크립트에서 PowerShell 스크립트를 가져옵니다.

탄력적 데이터베이스 도구 클라이언트 라이브러리는 GitHub: Azure/elastic-db-tools에서 사용할 수 있습니다.

분할/병합 도구를 사용하여 데이터를 다중 테넌트 모델과 단일 테넌트 모델 간에 이동합니다. 분할 병합 도구를 참조하세요.

추가 리소스

다중 테넌트 SaaS(Software-as-a-Service) 데이터베이스 애플리케이션의 일반적인 데이터 아키텍처 패턴에 대한 내용은 Azure SQL Database를 사용하는 다중 테넌트 SaaS 애플리케이션의 디자인 패턴을 참조하세요.

질문 및 기능 요청

질문이 있는 경우 SQL Database에 대한 Microsoft QA 질문 페이지를 사용하고, 기능 요청이 있는 경우 기능 요청을 SQL Database 피드백 포럼에 추가하세요.