Azure Cosmos DB'de benzersiz anahtar kısıtlamaları

UYGULANANLAR: NoSQL

Benzersiz anahtarlar, Azure Cosmos DB kapsayıcısına veri bütünlüğü katmanı ekler. Azure Cosmos DB kapsayıcısı oluştururken benzersiz bir anahtar ilkesi oluşturursunuz. Benzersiz anahtarlarla, mantıksal bölüm içindeki bir veya daha fazla değerin benzersiz olduğundan emin olursunuz. Ayrıca bölüm anahtarı başına benzersizliği de garanti edebilirsiniz.

Benzersiz anahtar ilkesine sahip bir kapsayıcı oluşturduktan sonra, benzersiz anahtar kısıtlaması tarafından belirtildiği gibi, mantıksal bölümde yinelenen öğeyle sonuçlanan yeni veya var olan bir öğenin güncelleştirilmesi engellenir. Benzersiz anahtarla birleştirilen bölüm anahtarı, kapsayıcı kapsamındaki bir öğenin benzersizliğini garanti eder.

Örneğin, benzersiz anahtar kısıtlaması ve CompanyID bölüm anahtarı olarak ile Email address bir Azure Cosmos DB kapsayıcısını göz önünde bulundurun. Kullanıcının e-posta adresini benzersiz bir anahtarla yapılandırdığınızda, her öğenin belirli CompanyIDbir içinde benzersiz bir e-posta adresi vardır. Yinelenen e-posta adresleriyle ve aynı bölüm anahtarı değeriyle iki öğe oluşturulamaz. Azure Cosmos DB'nin NoSQL API'sinde öğeler JSON değerleri olarak depolanır. Bu JSON değerleri büyük/küçük harfe duyarlıdır. Bir özelliği benzersiz anahtar olarak seçtiğinizde, bu özellik için büyük/küçük harfe duyarlı değerler ekleyebilirsiniz. Örneğin, name özelliğinde tanımlanmış benzersiz bir anahtarınız varsa, "Gaby" "gaby" ile farklıdır ve her ikisini de kapsayıcıya ekleyebilirsiniz.

Aynı e-posta adresine sahip ancak aynı ad, soyadı ve e-posta adresi olmayan öğeler oluşturmak için benzersiz anahtar ilkesine daha fazla yol ekleyin. Yalnızca e-posta adresini temel alan benzersiz bir anahtar oluşturmak yerine, ad, soyadı ve e-posta adresinin birleşimiyle benzersiz bir anahtar da oluşturabilirsiniz. Bu anahtar bileşik benzersiz anahtar olarak bilinir. Bu durumda, belirli CompanyID bir içindeki üç değerin her benzersiz bileşimine izin verilir.

Örneğin kapsayıcı, her öğenin benzersiz anahtar kısıtlamasını kabul ettiği aşağıdaki değerlere sahip öğeler içerebilir.

Şirket Kimliği Ad Soyadı E-posta adresi
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

Önceki tabloda listelenen birleşimlerle başka bir öğe eklemeye çalışırsanız bir hata alırsınız. Hata, benzersiz anahtar kısıtlamasının karşılanmadığını gösterir. ya da Resource with specified ID or name already existsResource with specified ID, name, or unique index already exists dönüş iletisi olarak alırsınız.

Benzersiz anahtar tanımlama

Benzersiz anahtarları yalnızca Azure Cosmos DB kapsayıcısı oluşturduğunuzda tanımlayabilirsiniz. Benzersiz bir anahtarın kapsamı mantıksal bölüm olarak belirlenmiştir. Önceki örnekte, kapsayıcıyı posta koduna göre bölümlerseniz, her mantıksal bölümde aynı öğelere sahip olabilirsiniz. Benzersiz anahtarlar oluştururken aşağıdaki özellikleri göz önünde bulundurun:

  • Mevcut bir kapsayıcıyı farklı bir benzersiz anahtar kullanacak şekilde güncelleştiremezsiniz. Başka bir deyişle, benzersiz bir anahtar ilkesiyle bir kapsayıcı oluşturulduktan sonra ilke değiştirilemez.

  • Mevcut bir kapsayıcı için benzersiz bir anahtar ayarlamak için benzersiz anahtar kısıtlamasına sahip yeni bir kapsayıcı oluşturun. Verileri mevcut kapsayıcıdan yeni kapsayıcıya taşımak için uygun veri geçiş aracını kullanın. SQL kapsayıcıları için verileri taşımak için kapsayıcı kopyalama işlerini kullanın. MongoDB kapsayıcıları için mongoimport.exe veya mongorestore.exe kullanarak verileri taşıyın.

  • Benzersiz bir anahtar ilkesi en fazla 16 yol değerine sahip olabilir. Örneğin, değerler , /lastNameve /address/zipCodeolabilir/firstName. Her benzersiz anahtar ilkesinin en fazla 10 benzersiz anahtar kısıtlaması veya bileşimi olabilir. Önceki örnekte ad, soyadı ve e-posta adresi bir kısıtlamadır. Bu kısıtlama, 16 olası yoldan 3'ünün kullanılmasını sağlar.

  • Bir kapsayıcı benzersiz bir anahtar ilkesine sahip olduğunda, bir öğeyi oluşturmak, güncelleştirmek ve silmek için İstek Birimi (RU) ücretleri biraz daha yüksektir.

  • Seyrek benzersiz anahtarlar desteklenmez. Bazı benzersiz yol değerleri eksikse, bunlar benzersizlik kısıtlamasında yer alan null değerler olarak kabul edilir. Bu nedenle, bu kısıtlamayı karşılamak için null değere sahip tek bir öğe olabilir.

  • Benzersiz anahtar adları büyük/küçük harfe duyarlıdır. Örneğin, benzersiz anahtar kısıtlaması olarak ayarlanmış /address/zipcodebir kapsayıcı düşünün. Verilerinizde adlı ZipCodebir alan varsa, Azure Cosmos DB benzersiz anahtar olarak "null" ekler çünkü zipcode ile ZipCodeaynı değildir. Bu büyük/küçük harf duyarlılığı nedeniyle, yinelenen "null" benzersiz anahtar kısıtlamasını ihlal ettiğinden ZipCode içeren diğer tüm kayıtlar eklenemez.

Sonraki adımlar

  • Mantıksal bölümler hakkında daha fazla bilgi edinin
  • Kapsayıcı oluştururken benzersiz anahtarları tanımlamayı keşfetme
  • Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.
    • Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdek veya vCPU kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
    • Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin