Adicionando um fragmento usando ferramentas do Banco de Dados Elástico

Aplica-se a: Banco de Dados SQL do Azure

Para adicionar um fragmento a um novo intervalo ou uma chave

Geralmente, os aplicativos precisam adicionar novos fragmentos para lidar com os dados que são esperados de novas chaves ou intervalos de chaves para um mapa do fragmento que já existe. Por exemplo, um aplicativo fragmentado por ID de locatário pode precisar criar um outro fragmento para um novo locatário ou dados fragmentados mensalmente podem precisar de um novo fragmento provisionado antes do início de cada mês.

Se o novo intervalo de valores de chave ainda não faz parte de um mapeamento existente, adicione o novo fragmento e associar a nova chave ou o intervalo a esse fragmento.

Exemplo: adicionar um fragmento e seu intervalo a um mapa de fragmentos existente

Este exemplo usa os métodos TryGetShard (Java, .NET) a CreateShard (Java, .NET), CreateRangeMapping (Java, .NET) e cria uma instância da classe ShardLocation (Java, .NET). No exemplo a seguir, um banco de dados denominado sample_shard_2 e todos os objetos de esquema necessários dentro dele foram criados para conter o intervalo [300, 400).

// sm is a RangeShardMap object.
// Add a new shard to hold the range being added.
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer, "sample_shard_2"));  
}

// Create the mapping and associate it with the new shard
sm.CreateRangeMapping(new RangeMappingCreationInfo<long>
                            (new Range<long>(300, 400), shard2, MappingStatus.Online));

Para adicionar um fragmento de uma parte vazia de um intervalo existente

Em algumas circunstâncias, você já mapeou um intervalo para um fragmento e parcialmente preencheu-o com dados, mas agora deseja que os dados futuros sejam direcionados para um fragmento diferente. Por exemplo, você fragmentou por intervalo de dias e já tem 50 dias alocados a um fragmento, mas no dia 24, você quer que os dados futuros entrem em um fragmento diferente. A ferramenta de divisão/mesclagem do banco de dados elástico pode executar essa operação, mas, se a movimentação de dados não for necessária [por exemplo, se os dados do intervalo de dias (25, 50), ou seja, incluindo o dia 25, mas não o dia 50, ainda não existirem], você poderá executar tudo isso usando as APIs de Gerenciamento de Mapa de Fragmentos diretamente.

Exemplo: dividir um intervalo e atribuir a parte vazia a um fragmento adicionado recentemente

Um banco de dados chamado "sample_shard_2" e todos os objetos de esquema necessários dentro dele foram criados.

// sm is a RangeShardMap object.
// Add a new shard to hold the range we will move
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer,"sample_shard_2"));  
}

// Split the Range holding Key 25
sm.SplitMapping(sm.GetMappingForKey(25), 25);

// Map new range holding [25-50) to different shard:
// first take existing mapping offline
sm.MarkMappingOffline(sm.GetMappingForKey(25));

// now map while offline to a different shard and take online
RangeMappingUpdate upd = new RangeMappingUpdate();
upd.Shard = shard2;
sm.MarkMappingOnline(sm.UpdateMapping(sm.GetMappingForKey(25), upd));

Importante

Use essa técnica somente se você tiver certeza de que o intervalo para o mapeamento atualizado está vazio. Os métodos anteriores não verificam os dados para o intervalo que está sendo movido, portanto, é melhor incluir verificações em seu código. Se existirem linhas no intervalo que está sendo movido, a distribuição de dados real não corresponderá ao mapa do fragmento atualizado. Use a ferramenta de divisão/mesclagem para executar a operação nesses casos.

Ainda não está usando ferramentas de banco de dados elástico? Confira nosso Guia de Introdução. Em caso de dúvidas, entre em contato conosco na página de perguntas do Microsoft Q&A para Banco de Dados SQL e, para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no Fórum de comentários sobre o Banco de Dados SQL.