Dodawanie fragmentu przy użyciu narzędzi elastycznej bazy danych
Dotyczy: Azure SQL Database
Aby dodać fragment dla nowego zakresu lub klucza
Aplikacje często muszą dodawać nowe fragmenty do obsługi danych oczekiwanych z nowych kluczy lub zakresów kluczy dla mapy fragmentów, która już istnieje. Na przykład aplikacja podzielone na fragmenty według identyfikatora dzierżawy może wymagać utworzenia nowego fragmentu dla nowej dzierżawy lub co miesiąc podzielonych na fragmenty danych może wymagać nowej aprowizacji fragmentu przed rozpoczęciem każdego nowego miesiąca.
Jeśli nowy zakres wartości klucza nie jest jeszcze częścią istniejącego mapowania, możesz dodać nowy fragment i skojarzyć nowy klucz lub zakres z tym fragmentem.
Przykład: dodawanie fragmentu i jego zakresu do istniejącej mapy fragmentów
W tym przykładzie użyto fragmentu TryGetShard (Java, .NET) w klasie CreateShard (Java, .NET), CreateRangeMapping (metody Java, .NET) i tworzy wystąpienie klasy ShardLocation (Java, .NET). W poniższym przykładzie utworzono bazę danych o nazwie sample_shard_2 i wszystkie niezbędne obiekty schematu w nim do przechowywania zakresu [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));
Aby dodać fragment dla pustej części istniejącego zakresu
W niektórych okolicznościach może już zostać zamapowany zakres na fragment i częściowo wypełniony danymi, ale teraz chcesz, aby nadchodzące dane były kierowane do innego fragmentu. Na przykład możesz fragmentować według zakresu dni i przydzielić je już 50 dni do fragmentu, ale w dniu 24 chcesz, aby przyszłe dane wylądowały w innym fragmentie. Narzędzie do dzielenia i scalania elastycznej bazy danych może wykonać tę operację, ale jeśli przenoszenie danych nie jest konieczne (na przykład dane dla zakresu dni [25, 50), czyli dzień 25 włącznie do 50 wykluczających się, nie istnieje jeszcze) możesz wykonać to całkowicie przy użyciu interfejsów API zarządzania mapami fragmentów bezpośrednio.
Przykład: dzielenie zakresu i przypisywanie pustej części do nowo dodanego fragmentu
Utworzono bazę danych o nazwie "sample_shard_2" i wszystkie niezbędne obiekty schematu.
// 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));
Ważne
Ta technika jest używana tylko wtedy, gdy masz pewność, że zakres zaktualizowanego mapowania jest pusty. Powyższe metody nie sprawdzają danych dla przenoszonego zakresu, dlatego najlepiej uwzględnić kontrole w kodzie. Jeśli wiersze istnieją w przenoszonym zakresie, rzeczywista dystrybucja danych nie będzie zgodna ze zaktualizowaną mapą fragmentów. Użyj narzędzia split-merge, aby wykonać operację w tych przypadkach.
Powiązana zawartość
Jeszcze nie korzystasz z narzędzi elastycznych baz danych? Zapoznaj się z naszym przewodnikiem Wprowadzenie. W przypadku pytań skontaktuj się z nami na stronie pytań i odpowiedzi dotyczących usługi SQL Database oraz w przypadku żądań funkcji, dodaj nowe pomysły lub zagłosuj na istniejące pomysły na forum opinii usługi SQL Database.