Compartir a través de


Migración de bases de datos existentes al escalado horizontal

Se aplica a:Azure SQL Database

Administre fácilmente las bases de datos particionadas escaladas existentes mediante herramientas (como la creación de bases de datos en la nube escalables). Primero convierta un conjunto existente de bases de datos para utilizar Shard Map Manager.

Información general

Para migrar una base de datos particionada existente:

  1. Prepare la base de datos de Shard Map Manager.
  2. Crear el mapa de particiones.
  3. Preparar las particiones individuales.
  4. Agregue asignaciones al mapa de particiones.

Estas técnicas pueden implementarse mediante la biblioteca cliente de .NET Framework o los scripts de PowerShell que se encuentran en Azure SQL Database: scripts de herramientas para bases de datos elásticas. Los ejemplos siguientes usan los scripts de PowerShell.

Para más información sobre ShardMapManager, consulte Administración de mapas de particiones. Si desea más información general de las herramientas para bases de datos elásticas, consulte Información general de las características de las bases de datos elásticas.

Prepare la base de datos de Shard Map Manager.

Shard Map Manager es una base de datos especial que contiene los datos para administrar bases de datos con escalado horizontal. Puede utilizar una base de datos existente o crear una nueva. Tenga en cuenta que una base de datos que actúa como Shard Map Manager no debe ser la misma base de datos que la de una partición. El script de PowerShell no crea la base de datos por usted.

Paso 1: crear un administrador de mapas de particiones

# 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.

Recuperación del administrador de mapas de particiones

Después de la creación, puede recuperar el administrador de mapas de particiones con este cmdlet. Este paso es necesario cada vez que tiene que usar el objeto 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>'

Paso 2: crear el mapa de particiones.

Seleccione el tipo de mapa de particiones que desea crear. La elección depende de la arquitectura de base de datos:

  1. Un solo inquilino por base de datos (para ver los términos, consulte el glosario).
  2. Varios inquilinos por base de datos (dos tipos):
    1. Asignación de lista
    2. Asignación de intervalo

Para un modelo de un solo inquilino, cree un mapa de particiones de asignación de lista . El modelo de inquilino único asigna una base de datos por inquilino. Se trata de un modelo eficaz para desarrolladores de SaaS, pues simplifica la administración.

Diagrama de asignación de listas.

El modelo multiinquilino asigna varios inquilinos a una base de datos individual (y puede distribuir grupos de inquilinos entre varias bases de datos). Use este modelo si espera que cada inquilino tenga pequeñas necesidades de datos. En este modelo, asigne un intervalo de inquilinos a una base de datos mediante asignación de intervalo.

Diagrama de asignación de intervalos.

O bien puede implementar un modelo de base de datos de varios inquilinos (multiinquilino) mediante una asignación de lista para asignar varios inquilinos a una base de datos concreta. Por ejemplo, DB1 se usa para almacenar información sobre el identificador de inquilino 1 y 5, mientras que DB2 almacena datos sobre el inquilino 7 y 10.

Diagrama de varios inquilinos en una sola base de datos.

En función de su elección, elija una de estas opciones:

Opción 1: crear un mapa de particiones para una asignación de lista

Cree un mapa de particiones con el objeto ShardMapManager.

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

Opción 2: crear un mapa de particiones para una asignación de intervalo

Para usar este patrón de asignación, los valores del ID de inquilino deben consistir en intervalos continuos y es posible que haya una brecha en los intervalos al omitir el intervalo al crear las bases de datos.

# $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

Opción 3: Asignaciones de lista en una base de datos individual

La configuración de este patrón también requiere la creación de un mapa de lista, tal como se muestra en el paso 2, opción 1.

Paso 3: preparar particiones individuales

Agregue cada partición (base de datos) al administrador de mapas de particiones. Esto prepara a las bases de datos individuales para almacenar información de asignación. Ejecute este método en cada partición. $ShardMap es el mapa de particiones creado en el paso 2.

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

Paso 4: agregar asignaciones

La adición de asignaciones depende del tipo de mapa de particiones creado. Si ha creado un mapa de lista, agregue asignaciones de lista. Si ha creado un mapa de intervalo, agregue asignaciones de intervalo.

Opción 1: asignar los datos de una asignación de lista

Asigne los datos agregando una asignación de lista para cada inquilino. Utilice el siguiente script de PowerShell de ejemplo para crear las asignaciones y asociarlas a las nuevas particiones.

# 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>'

Opción 2: asignar los datos de una asignación de intervalo

Agregue las asignaciones de intervalo en todas las asociaciones de base de datos del intervalo de ID de inquilino: Utilice el siguiente script de PowerShell de ejemplo para crear las asignaciones y asociarlas a las nuevas particiones.

# 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>'

Paso 4, opción 3: asignar los datos para varios inquilinos en una base de datos individual

Para cada inquilino, ejecute el Add-ListMapping cmdlet (opción 1).

Comprobar las asignaciones

Se puede consultar información sobre las particiones existentes y las asignaciones asociadas a ellas mediante el siguiente script de ejemplo de PowerShell:

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

Resumen

Una vez haya completado la configuración, puede empezar a usar la biblioteca de cliente de Elastic Database. También puede usar las características de enrutamiento dependiente de los datos y consulta a través de particiones múltiples.