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-Number
elementu . 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:
- Dowiedz się więcej o partycjach logicznych.
- Dowiedz się więcej o sposobie aprowizowania 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? Do planowania pojemności można użyć informacji o istniejącym klastrze bazy danych.
- 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