다음을 통해 공유


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

적용 대상:Azure SQL 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 개발자에게 효과적인 모델입니다.

목록 매핑 다이어그램

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

범위 매핑 다이어그램

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

단일 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단계: 개별 분할 준비

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

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

4단계: 매핑 추가

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

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

각 테넌트를 위해 목록 매핑을 추가하여 데이터를 매핑합니다. 다음 샘플 PowerShell 스크립트를 사용하여 매핑을 만들고 새 분할된 데이터베이스와 연결합니다.

# Create the mapping 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 범위와 데이터베이스 연관성에 대한 범위 매핑을 추가합니다. 다음 샘플 PowerShell 스크립트를 사용하여 매핑을 만들고 새 분할된 데이터베이스와 연결합니다.

# Create the mapping 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) cmdlet을 실행합니다.

매핑 확인

기존 분할된 데이터베이스 및 이러한 분할된 데이터베이스와 연결된 매핑에 대한 정보는 다음 PowerShell 샘플 스크립트를 사용하여 쿼리할 수 있습니다.

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

요약

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