Unikatowe ograniczenia klucza w usłudze Azure Cosmos DB
DOTYCZY: NoSQL
Unikatowe klucze dodają warstwę integralności danych do kontenera usługi Azure Cosmos DB. Podczas tworzenia kontenera usługi Azure Cosmos DB należy utworzyć unikatowe zasady klucza. W przypadku unikatowych kluczy upewnij się, że co najmniej jedna wartość w partycji logicznej jest unikatowa. Można również zagwarantować unikatowość na klucz partycji.
Po utworzeniu kontenera z unikatowymi zasadami klucza tworzenie nowego lub aktualizacji istniejącego elementu, co powoduje zablokowanie duplikatu w partycji logicznej, określonego przez ograniczenie klucza unikatowego. Klucz partycji połączony z unikatowym kluczem gwarantuje unikatowość elementu w zakresie kontenera.
Rozważmy na przykład kontener usługi Azure Cosmos DB z Email address
ograniczeniem unikatowego klucza i CompanyID
kluczem partycji. Po skonfigurowaniu adresu e-mail użytkownika przy użyciu unikatowego klucza każdy element ma unikatowy adres e-mail w danym CompanyID
elemencie . Nie można utworzyć dwóch elementów z zduplikowanymi adresami e-mail i tą samą wartością klucza partycji. W interfejsie API usługi Azure Cosmos DB dla NoSQL elementy są przechowywane jako wartości JSON. W tych wartościach JSON jest rozróżniana wielkość liter. Po wybraniu właściwości jako unikatowego klucza można wstawić wartości poufne wielkości liter dla tej właściwości. Jeśli na przykład masz unikatowy klucz zdefiniowany we właściwości name, "Gaby" różni się od "gaby" i możesz wstawić oba te elementy do kontenera.
Aby utworzyć elementy o tym samym adresie e-mail, ale nie tym samym imieniu, nazwisku i adresie e-mail, dodaj więcej ścieżek do unikatowych zasad klucza. Zamiast tworzyć unikatowy klucz na podstawie tylko adresu e-mail, możesz również utworzyć unikatowy klucz z kombinacją imienia, nazwiska i adresu e-mail. Ten klucz jest nazywany złożonym unikatowym kluczem. W takim przypadku każda unikatowa kombinacja trzech wartości w danym CompanyID
przypadku jest dozwolona.
Na przykład kontener może zawierać elementy z następującymi wartościami, gdzie każdy element honoruje ograniczenie unikatowego klucza.
Identyfikator firmy | Imię | Nazwisko | Adres e-mail |
---|---|---|---|
Contoso | Gaby | Duperre | gaby@contoso.com |
Contoso | Gaby | Duperre | gaby@fabrikam.com |
Fabrikam | Gaby | Duperre | gaby@fabrikam.com |
Fabrikam | Ivan | Duperre | gaby@fabrikam.com |
Fabrkam | Duperre | gaby@fabraikam.com | |
Fabrkam | gaby@fabraikam.com |
Jeśli spróbujesz wstawić inny element z kombinacjami wymienionymi w poprzedniej tabeli, zostanie wyświetlony błąd. Błąd wskazuje, że ograniczenie unikatowego klucza nie zostało spełnione. Zostanie wyświetlony Resource with specified ID or name already exists
komunikat lub Resource with specified ID, name, or unique index already exists
jako komunikat zwrotny.
Definiowanie unikatowego klucza
Unikatowe klucze można definiować tylko podczas tworzenia kontenera usługi Azure Cosmos DB. Unikatowy klucz jest podzielony na partycję logiczną. W poprzednim przykładzie, jeśli partycjonujesz kontener na podstawie kodu POCZTOWEgo, możesz mieć te same elementy w każdej partycji logicznej. Podczas tworzenia unikatowych kluczy należy wziąć pod uwagę następujące właściwości:
Nie można zaktualizować istniejącego kontenera, aby użyć innego unikatowego klucza. Innymi słowy, po utworzeniu kontenera przy użyciu unikatowych zasad klucza nie można zmienić zasad.
Aby ustawić unikatowy klucz dla istniejącego kontenera, utwórz nowy kontener z ograniczeniem unikatowego klucza. Użyj odpowiedniego narzędzia do migracji danych, aby przenieść dane z istniejącego kontenera do nowego kontenera. W przypadku kontenerów SQL użyj zadań kopiowania kontenerów, aby przenieść dane. W przypadku kontenerów bazy danych MongoDB użyj mongoimport.exe lub mongorestore.exe , aby przenieść dane.
Unikatowe zasady klucza mogą mieć maksymalnie 16 wartości ścieżek. Na przykład wartości mogą mieć
/firstName
wartość ,/lastName
i/address/zipCode
. Każda unikatowa zasada klucza może mieć maksymalnie 10 unikatowych ograniczeń lub kombinacji kluczy. W poprzednim przykładzie imię, nazwisko i adres e-mail są jednym ograniczeniem. To ograniczenie używa 3 z 16 możliwych ścieżek.Gdy kontener ma unikatowe zasady klucza, opłaty za jednostkę żądania (RU) do tworzenia, aktualizowania i usuwania elementu są nieco wyższe.
Unikatowe klucze nie są obsługiwane. Jeśli brakuje niektórych unikatowych wartości ścieżki, są one traktowane jako wartości null, które biorą udział w ograniczeniu unikatowości. Z tego powodu może istnieć tylko jeden element z wartością null, aby spełnić to ograniczenie.
Unikatowe nazwy kluczy są uwzględniane w wielkości liter. Rozważmy na przykład kontener z unikatowym ograniczeniem klucza ustawionym na
/address/zipcode
wartość . Jeśli dane mają pole o nazwieZipCode
, usługa Azure Cosmos DB wstawia wartość "null" jako unikatowy klucz, ponieważzipcode
nie jest taka sama jakZipCode
. Ze względu na ważność tego przypadku nie można wstawić wszystkich innych rekordów z kodem zipcode, ponieważ duplikat "null" narusza ograniczenie klucza unikatowego.
Następne kroki
- Dowiedz się więcej o partycjach logicznych
- Dowiedz się , jak definiować unikatowe klucze podczas tworzenia kontenera
- 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