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 elementami skojarzonymi 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 lub daty urządzenia. Inną opcją jest połączenie tych dwóch wartości w syntetyczną partitionKey właściwość, która jest używana jako klucz partycji.

{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}

W scenariuszach w czasie rzeczywistym 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

Inną możliwą strategią równomiernego dystrybuowania obciążenia jest dołączenie liczby losowej 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ć liczbę losową 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 i tak dalej, za pośrednictwem 2018-08-09.400. 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ą większą przepływność.

Używanie klucza partycji ze wstępnie obliczonymi sufiksami

Strategia losowego sufiksu może znacznie zwiększyć 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, użyj wstępnie obliczonej strategii sufiksów. Zamiast używać liczby losowej do dystrybucji elementów między partycjami, użyj liczby obliczonej 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 to następnie data połączona 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 wszystkie obciążenia.

Następne kroki

Więcej informacji na temat koncepcji partycjonowania można uzyskać w następujących artykułach: