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

UYGULANDıĞı YER: SQL API

Benzersiz anahtarlar, azure depolama kapsayıcısı için bir veri bütünlüğü Cosmos ekler. Azure Cosmos kapsayıcısı 2. Azure Cosmos oluşturabilirsiniz. Benzersiz anahtarlarla, mantıksal bölüm içindeki bir veya daha fazla değerin benzersiz olduğundan emin oluruz. Bölüm anahtarı başına benzersizliği de garanti altına almak için kullanabilirsiniz.

Benzersiz anahtar ilkesine sahip bir kapsayıcı oluşturdukta, benzersiz anahtar kısıtlaması tarafından belirtilen şekilde, yeni veya mevcut bir öğenin güncelleştirilerek mantıksal bölüm içinde yinelenen bir sonuç oluşturulması önlenmiş olur. Benzersiz anahtarla birleştirilmiş bölüm anahtarı, kapsayıcı kapsamındaki bir öğenin benzersizliğini garantiler.

Örneğin, benzersiz anahtar kısıtlaması Cosmos bölüm anahtarı olarak bir Azure depolama Email address CompanyID kapsayıcısı düşünün. Kullanıcının e-posta adresini benzersiz bir anahtarla yapılandırıldığında, her öğenin belirli bir içinde benzersiz bir e-posta adresi CompanyID olur. Yinelenen e-posta adresleriyle ve aynı bölüm anahtarı değeriyle iki öğe oluşturulamıyor. Azure Cosmos DB'nin SQL (Core) API'sinde öğeler JSON değerleri olarak depolanır. Bu JSON değerleri büyük/büyük/büyük harfe duyarlıdır. Bir özelliği benzersiz anahtar olarak seçerseniz, bu özellik için büyük/küçük harfe duyarlı değerler ebilirsiniz. Örneğin, name özelliği üzerinde tanımlanmış benzersiz bir anahtarınız varsa, "Gaby" "gaby" ile farklıdır ve her ikisini de kapsayıcıya eklersiniz.

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, verilen bir içindeki üç değerin her benzersiz birleşimine CompanyID izin verilir.

Örneğin kapsayıcı, her öğenin benzersiz anahtar kısıtlamasına uygun olduğu aşağıdaki değerlere sahip öğeler içerebilir.

CompanyID Ad Soyadı E-posta adresi
Contoso Gaby Duperre gaby@contoso.com
Contoso Gaby Duperre gaby@fabrikam.com
Fabrikam Gaby Duperre gaby@fabrikam.com
Fabrikam İsk Duperre gaby@fabrikam.com
Fabrkam Duperre gaby@fabraikam.com
Fabrkam gaby@fabraikam.com

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

Benzersiz bir anahtar tanımlama

Benzersiz anahtarları yalnızca Bir Azure Cosmos kapsayıcısı 00.000.000 Benzersiz bir anahtarın kapsamı bir mantıksal bölümdür. Önceki örnekte, kapsayıcıyı ZIP koduna göre bölümlersanız, her mantıksal bölümde yinelenen öğeler olur. Benzersiz anahtarlar oluşturmada aşağıdaki özellikleri göz önünde önünde bırakın:

  • Var olan bir kapsayıcıyı farklı bir benzersiz anahtar kullanmak üzere güncelleştiresiniz. Başka bir deyişle, benzersiz bir anahtar ilkesiyle kapsayıcı oluşturulduktan sonra ilke değiştirilemez.

  • Mevcut kapsayıcıya 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. Kapsayıcıları SQL veri taşımak için Veri Geçişi aracını kullanın. MongoDB kapsayıcıları için verileri mongoimport.exe veya mongorestore.exe kullanın.

  • Benzersiz bir anahtar ilkesi en fazla 16 yol değerine sahip olabilir. Örneğin, değerler , /firstName ve /lastName /address/zipCode olabilir. Her benzersiz anahtar ilkesi en fazla 10 benzersiz anahtar kısıtlamasına veya bileşimine sahip olabilir. Her benzersiz dizin kısıtlaması için birleşik yollar 60 baytı aşmaz. Önceki örnekte ad, soyadı ve e-posta adresi bir kısıtlamadır. Bu kısıtlama, 16 olası yoldan 3' ü kullanır.

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

  • Seyrek benzersiz anahtarlar desteklenmiyor. Bazı benzersiz yol değerleri eksikse, benzersizlik kısıtlamasına 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/büyük/büyük harfe duyarlıdır. Örneğin, benzersiz anahtar kısıtlaması olarak ayarlanmış bir kapsayıcı /address/zipcode düşünün. Verilerinizde adlı bir alan varsa Azure Cosmos DB, ile aynı olmayan benzersiz anahtar olarak ZipCode "null" zipcode ZipCode ekler. Bu büyük/küçük harf duyarlılığı nedeniyle, yinelenen "null" değeri benzersiz anahtar kısıtlamasını ihlal ettiği için ZipCode'a sahip diğer tüm kayıtlar eklenemez.

Sonraki adımlar

  • Mantıksal bölümler hakkında daha fazla bilgi
  • 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ında bilgi kullanabilirsiniz.
    • Mevcut veritabanı kümenizin sanal çekirdek ve sunucu sayısıyla ilgili tüm bilginiz varsa, sanal çekirdek veya vCPUS kullanarak istek birimlerini tahmin hakkında bilgi edinebilirsiniz
    • 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 hakkında bilgi edinin