Udostępnij za pośrednictwem


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 CompanyIDelemencie . 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ć /firstNamewartość , /lastNamei /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/zipcodewartość . Jeśli dane mają pole o nazwie ZipCode, usługa Azure Cosmos DB wstawia wartość "null" jako unikatowy klucz, ponieważ zipcode nie jest taka sama jak ZipCode. 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