Udostępnij za pośrednictwem


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.400metody . 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-Numberelementu . 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: