Tworzenie syntetycznego klucza partycji
DOTYCZY: NoSQL
Najlepszym rozwiązaniem jest posiadanie klucza partycji z wieloma odrębnymi wartościami, takimi jak setki lub tysiące. Celem jest równomierne dystrybuowanie danych i obciążeń między elementy skojarzone z tymi wartościami klucza partycji. Jeśli taka właściwość nie istnieje w danych, możesz utworzyć syntetyczny klucz partycji. W tym dokumencie opisano kilka podstawowych technik generowania syntetycznego klucza partycji dla kontenera usługi Azure Cosmos DB.
Łączenie wielu właściwości elementu
Klucz partycji można utworzyć, łącząc wiele wartości właściwości w jedną sztuczną partitionKey
właściwość. Te klucze są określane jako klucze syntetyczne. Rozważmy na przykład następujący przykładowy dokument:
{
"deviceId": "abc-123",
"date": 2018
}
Dla poprzedniego dokumentu jedną z opcji jest ustawienie /deviceId lub /date jako klucza partycji. Użyj tej opcji, jeśli chcesz podzielić kontener na partycje na podstawie identyfikatora urządzenia lub daty. Inną opcją jest połączenie tych dwóch wartości z właściwością syntetyczną partitionKey
używaną jako klucz partycji.
{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}
W rzeczywistych scenariuszach możesz mieć tysiące elementów w bazie danych. Zamiast ręcznie dodawać klucz syntetyczny, zdefiniuj logikę po stronie klienta, aby połączyć wartości i wstawić klucz syntetyczny do elementów w kontenerach usługi Azure Cosmos DB.
Używanie klucza partycji z sufiksem losowym
Kolejną możliwą strategią równomiernego rozłożenia obciążenia jest dołączenie losowej liczby na końcu wartości klucza partycji. Podczas dystrybucji elementów w ten sposób można wykonywać równoległe operacje zapisu między partycjami.
Przykładem jest to, że klucz partycji reprezentuje datę. Możesz wybrać losową liczbę z zakresu od 1 do 400 i połączyć ją jako sufiks do daty. Ta metoda powoduje, że wartości klucza partycji, takie jak 2018-08-09.1
,2018-08-09.2
itd. za pośrednictwem 2018-08-09.400
metody . Ponieważ klucz partycji jest losowy, operacje zapisu w kontenerze każdego dnia są rozłożone równomiernie na wiele partycji. Ta metoda zapewnia lepszą równoległość i ogólną wyższą przepływność.
Używanie klucza partycji ze wstępnie obliczonymi sufiksami
Strategia losowego sufiksu może znacznie poprawić przepływność zapisu, ale trudno jest odczytać określony element. Nie znasz wartości sufiksu, która została użyta podczas tworzenia elementu. Aby ułatwić odczytywanie poszczególnych elementów, należy użyć wstępnie obliczonej strategii sufiksów. Zamiast używać liczby losowej do dystrybucji elementów między partycjami, użyj liczby obliczanej na podstawie czegoś, co chcesz wykonać zapytanie.
Rozważmy poprzedni przykład, w którym kontener używa daty jako klucza partycji. Teraz załóżmy, że każdy element ma Vehicle-Identification-Number
atrybut (VIN
), do którego chcemy uzyskać dostęp. Ponadto załóżmy, że często uruchamiasz zapytania, aby znaleźć elementy według elementu VIN
, oprócz daty. Zanim aplikacja zapisze element w kontenerze, może obliczyć sufiks skrótu na podstawie numeru VIN i dołączyć go do daty klucza partycji. Obliczenie może wygenerować liczbę z zakresu od 1 do 400, która jest równomiernie rozłożona. Ten wynik jest podobny do wyników generowanych przez metodę strategii sufiksu losowego. Wartość klucza partycji jest następnie datą połączoną z obliczonym wynikiem.
Dzięki tej strategii operacje zapisu są równomiernie rozłożone na wartości klucza partycji i między partycjami. Możesz łatwo odczytać określony element i datę, ponieważ można obliczyć wartość klucza partycji dla określonego Vehicle-Identification-Number
elementu . Zaletą tej metody jest to, że można uniknąć tworzenia pojedynczego gorącego klucza partycji, tj. klucza partycji, który pobiera całe obciążenie.
Następne kroki
Więcej informacji na temat koncepcji partycjonowania można uzyskać w następujących artykułach:
- Dowiedz się więcej o partycjach logicznych.
- Dowiedz się więcej na temat aprowizacji przepływności w kontenerach i bazach danych usługi Azure Cosmos DB.
- Dowiedz się, jak aprowizować przepływność w kontenerze usługi Azure Cosmos DB.
- Dowiedz się, jak aprowizować przepływność w bazie danych usługi Azure Cosmos DB.
- Próbujesz zaplanować pojemność migracji do usługi Azure Cosmos DB? Informacje o istniejącym klastrze bazy danych można użyć do planowania pojemności.
- Jeśli wiesz, ile rdzeni wirtualnych i serwerów znajduje się w istniejącym klastrze bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu rdzeni wirtualnych lub procesorów wirtualnych
- Jeśli znasz typowe stawki żądań dla bieżącego obciążenia bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu planisty pojemności usługi Azure Cosmos DB