Egyedi kulcskorlátozások az Azure Cosmos DB-ben

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az egyedi kulcsok adatintegritási réteget adnak hozzá egy Azure Cosmos DB-tárolóhoz. Azure Cosmos DB-tároló létrehozásakor egyedi kulcsszabályzatot hozhat létre. Egyedi kulcsokkal győződjön meg arról, hogy egy logikai partíció egy vagy több értéke egyedi. A partíciókulcsonkénti egyediséget is garantálhatja.

Miután létrehozott egy egyedi kulcsszabályzattal rendelkező tárolót, a rendszer megakadályozza egy új vagy egy meglévő elem frissítését, amely duplikátumot eredményez egy logikai partíción belül, az egyedi kulcskorlátozás által meghatározott módon. Az egyedi kulccsal kombinált partíciókulcs garantálja egy elem egyediségét a tároló hatókörén belül.

Vegyük például egy Azure Cosmos DB-tárolót Email address egyedi kulcskényszerként és CompanyID partíciókulcsként. Ha a felhasználó e-mail-címét egyedi kulccsal konfigurálja, minden elem egyedi e-mail-címmel rendelkezik egy adott CompanyID. Két elem nem hozható létre duplikált e-mail-címmel és ugyanazzal a partíciókulcs-értékkel. Az Azure Cosmos DB NoSQL-hez készült API-jában az elemek JSON-értékekként vannak tárolva. Ezek a JSON-értékek megkülönböztetik a kis- és nagybetűket. Ha egyedi kulcsként kiválaszt egy tulajdonságot, beszúrhat kis- és nagybetűkre érzékeny értékeket. Ha például egy egyedi kulcs van definiálva a névtulajdonságon, a "Gaby" eltér a "gaby" értéktől, és mindkettőt beszúrhatja a tárolóba.

Ha ugyanazzal az e-mail-címmel, de nem ugyanazzal az utónévvel, vezetéknévvel és e-mail-címmel szeretne elemeket létrehozni, adjon hozzá további elérési utakat az egyedi kulcsszabályzathoz. Ahelyett, hogy csak az e-mail-cím alapján hoz létre egyedi kulcsot, létrehozhat egy egyedi kulcsot az utónév, a vezetéknév és az e-mail-cím kombinációjával. Ez a kulcs összetett egyedi kulcsként ismert. Ebben az esetben a három érték mindegyik egyedi kombinációja engedélyezett egy adott CompanyID értéken belül.

A tároló például az alábbi értékeket tartalmazó elemeket tartalmazhat, ahol minden elem betartja az egyedi kulcskényszert.

Cégazonosító First name Last name Email address
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

Ha egy másik elemet próbál beszúrni az előző táblázatban felsorolt kombinációkkal, hibaüzenet jelenik meg. A hiba azt jelzi, hogy az egyedi kulcskényszer nem teljesült. Vagy visszaküldött üzenetként kap Resource with specified ID or name already existsResource with specified ID, name, or unique index already exists .

Egyedi kulcs definiálása

Egyedi kulcsokat csak Azure Cosmos DB-tároló létrehozásakor definiálhat. Az egyedi kulcsok egy logikai partícióra terjednek ki. Az előző példában, ha a tárolót az irányítószám alapján particionálja, mindegyik logikai partícióban ugyanazokat az elemeket használhatja. Egyedi kulcsok létrehozásakor vegye figyelembe a következő tulajdonságokat:

  • Nem frissíthet meglévő tárolót egy másik egyedi kulcs használatára. Más szóval, ha egy tároló egyedi kulcsszabályzattal jön létre, a szabályzat nem módosítható.

  • Egy meglévő tároló egyedi kulcsának beállításához hozzon létre egy új tárolót az egyedi kulcskényszerrel. A megfelelő adatmigrálási eszközzel helyezze át az adatokat a meglévő tárolóból az új tárolóba. SQL-tárolók esetén a tárolómásolási feladatokat használva helyezze át az adatokat. MongoDB-tárolók esetén a mongoimport.exe vagy a mongorestore.exe használatával helyezze át az adatokat.

  • Az egyedi kulcsszabályzatok legfeljebb 16 elérésiút-értékkel rendelkezhetnek. Az értékek /firstNamelehetnek például az , /lastNameés /address/zipCodea . Minden egyedi kulcsszabályzat legfeljebb 10 egyedi kulcskorlátozással vagy kombinációval rendelkezhet. Az előző példában az utónév, a vezetéknév és az e-mail-cím együttes használata egyetlen korlátozás. Ez a korlátozás a 16 lehetséges elérési út közül 3-at használ.

  • Ha egy tároló egyedi kulcsszabályzattal rendelkezik, az elem létrehozásához, frissítéséhez és törléséhez szükséges kérelemegység-díjak valamivel magasabbak lesznek.

  • A ritka egyedi kulcsok nem támogatottak. Ha hiányzik néhány egyedi elérésiút-érték, azokat null értékként kezeli a rendszer, amely részt vesz az egyediség korlátozásában. Ezért csak egyetlen elem lehet null értékű, hogy megfeleljen ennek a kényszernek.

  • Az egyedi kulcsnevek megkülönböztetik a kis- és nagybetűket. Vegyük például egy tárolót, amelynek az egyedi kulcskorlátja a következő /address/zipcode. Ha az adatoknak van egy nevesített ZipCodemező, az Azure Cosmos DB a "null" értéket szúrja be egyedi kulcsként, mert zipcode nem ugyanaz, mint ZipCode. A kis- és nagybetűk érzékenysége miatt az irányítószámmal rendelkező összes többi rekord nem szúrható be, mert az ismétlődő "null" megsérti az egyedi kulcskényszert.

Következő lépések

  • További információ a logikai partíciókról
  • Ismerje meg , hogyan definiálhat egyedi kulcsokat tároló létrehozásakor
  • Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz? A kapacitástervezéshez használhatja a meglévő adatbázisfürt adatait.