Adicionando um fragmento usando as ferramentas do Elastic Database

Aplica-se a:Banco de Dados SQL do Azure

Para adicionar um fragmento para um novo intervalo ou chave

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

Se o novo intervalo de valores de chave ainda não fizer parte de um mapeamento existente, você poderá adicionar o novo fragmento e associar a nova chave ou intervalo a esse fragmento.

Exemplo: adicionar um fragmento e seu intervalo a um mapa de estilhaços existente

Este exemplo usa os métodos TryGetShard (Java, .NET), CreateShard (Java, .NET), CreateRangeMapping (Java, .NET e cria uma instância da classe ShardLocation (Java, .NET). No exemplo abaixo, um banco de dados chamado sample_shard_2 e todos os objetos de esquema necessários dentro dele foram criados para manter 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 a versão .NET, você também pode usar o PowerShell como uma alternativa para criar um novo Gerenciador de Mapas de Fragmentos. Um exemplo está disponível aqui.

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

Em algumas circunstâncias, você pode já ter mapeado um intervalo para um fragmento e parcialmente preenchido com dados, mas agora deseja que os dados futuros sejam direcionados para um fragmento diferente. Por exemplo, você pode fragmentar por intervalo de dias e já alocou 50 dias para um fragmento, mas no dia 24, você deseja que os dados futuros caiam em um fragmento diferente. A ferramenta de divisão de mesclagem de banco de dados elástico pode executar essa operação, mas se a movimentação de dados não for necessária (por exemplo, dados para o intervalo de dias [25, 50), ou seja, dia 25 inclusive a 50 exclusivo, ainda não existe), você pode executar isso inteiramente usando as APIs de gerenciamento de mapas de estilhaços diretamente.

Exemplo: dividir um intervalo e atribuir a parte vazia a um fragmento recém-adicionado

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 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, por isso é 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 de estilhaços atualizado. Use a ferramenta de mesclagem dividida para executar a operação nesses casos.

Recursos adicionais

Ainda não está usando ferramentas de banco de dados elástico? Consulte o nosso Guia de Introdução. Para dúvidas, entre em contato conosco na página de perguntas e respostas da Microsoft para o Banco de dados SQL e para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no fórum de comentários do Banco de dados SQL.