Partilhar via


Adicionando um fragmento usando as ferramentas do Elastic Database

Aplica-se a:Banco de Dados SQL do Azure

Adicionar um fragmento para um novo intervalo ou chave

As aplicações geralmente precisam adicionar novos shards para lidar com dados esperados de novas chaves ou intervalos de chaves, para um mapa de shards existente. Por exemplo, um aplicativo fragmentado por TenantID pode precisar criar um novo fragmento para um novo locatário ou dados fragmentados mensalmente pode 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 o seu intervalo a um mapa de fragmentos existente

Este exemplo usa os TryGetShard (Java, .NET), os CreateShard (Java, .NET), os métodos CreateRangeMapping (Java, .NET) e cria uma instância da classe ShardLocation (Java, .NET). No exemplo a seguir, um banco de dados nomeado 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));

Adicionar um fragmento a uma parte vazia de um intervalo existente.

Em algumas circunstâncias, poderá já ter mapeado um intervalo para um fragmento e tê-lo parcialmente preenchido com dados, mas agora pretende 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ões e fusões de banco de dados elástico pode executar esta 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 existem), pode realizar tudo isso diretamente usando as APIs de Gestão de Mapas de Fragmentação.

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

Um banco de dados nomeado 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á a ser movido, a distribuição real dos dados não corresponderá ao mapa de fragmentos atualizado. Use a ferramenta de divisão e mesclagem para executar a operação nesses casos.

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