Sdílet prostřednictvím


Přidání horizontálního oddílu pomocí nástrojů elastické databáze

Platí pro: Azure SQL Database

Přidání horizontálního oddílu pro nový rozsah nebo klíč

Aplikace často potřebují přidat nové horizontální oddíly pro zpracování dat, která se očekávají z nových klíčů nebo rozsahů klíčů, pro mapu horizontálních oddílů, která již existuje. Například aplikace horizontálně dělené podle ID tenanta může potřebovat vytvořit nový horizontální oddíl pro nového tenanta nebo data horizontálně dělené měsíčně můžou potřebovat nové horizontální oddíly zřízené před začátkem každého nového měsíce.

Pokud nový rozsah hodnot klíče ještě není součástí existujícího mapování, můžete přidat nový horizontální oddíl a přidružit nový klíč nebo rozsah k ho horizontálnímu oddílu.

Příklad: Přidání horizontálního oddílu a jeho rozsahu do existující mapy horizontálních oddílů

Tato ukázka používá TryGetShard (Java, .NET) CreateShard (Java, .NET), CreateRangeMapping (java, metody .NET a vytvoří instanci třídy ShardLocation (Java, .NET). V následující ukázce byla vytvořena databáze s názvem sample_shard_2 a všechny potřebné objekty schématu, které jsou v ní vytvořeny pro uchování rozsahu [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));

Přidání horizontálního oddílu pro prázdnou část existujícího rozsahu

V některých případech jste už možná namapovali rozsah na horizontální oddíl a částečně ho vyplnili daty, ale teď chcete, aby se nadcházející data směrovala na jiný horizontální oddíl. Můžete například horizontálně dělit podle rozsahu dnů a už jste horizontálnímu oddílu přidělili 50 dní, ale 24. den chcete, aby budoucí data přistála v jiném horizontálním oddílu. Nástroj pro rozdělení a sloučení elastické databáze může tuto operaci provést, ale pokud přesun dat není nezbytný (například data v rozsahu dnů [25, 50), tj. den 25 včetně až 50 exkluzivních, ještě neexistuje), můžete to provést přímo pomocí rozhraní API pro správu mapování horizontálních oddílů.

Příklad: Rozdělení oblasti a přiřazení prázdné části nově přidanému horizontálnímu oddílu

Byla vytvořena databáze s názvem "sample_shard_2" a všechny potřebné objekty schématu uvnitř této databáze.

// 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));

Důležité

Tuto techniku použijte pouze v případě, že jste si jisti, že rozsah aktualizovaného mapování je prázdný. Předchozí metody nekontrolují data přesunu rozsahu, takže je nejlepší zahrnout do kódu kontroly. Pokud řádky v přesunuté oblasti existují, skutečná distribuce dat neodpovídá aktualizované mapě horizontálních oddílů. K provedení operace použijte nástroj pro rozdělení a sloučení v těchto případech.

Ještě nepoužíváte nástroje elastické databáze? Podívejte se na naši příručku Začínáme. Pokud máte dotazy, kontaktujte nás na stránce otázek Microsoft Q&A pro SLUŽBU SQL Database a žádosti o funkce, přidejte nové nápady nebo hlasujte pro stávající nápady ve fóru pro zpětnou vazbu ke službě SQL Database.