Batasan kunci unik di Microsoft Azure Cosmos DB

BERLAKU UNTUK: NoSQL

Kunci unik menambahkan lapisan integritas data ke kontainer Azure Cosmos DB. Anda membuat kebijakan kunci unik saat membuat kontainer Azure Cosmos DB. Dengan kunci unik, Anda memastikan bahwa satu atau beberapa nilai dalam partisi logis bersifat unik. Anda juga dapat menjamin keunikan per kunci partisi.

Setelah Anda membuat kontainer dengan kebijakan kunci unik, ini mencegah pembuatan item baru atau pembaruan item lama yang menghasilkan duplikat dalam partisi logis, sebagaimana ditentukan oleh batasan kunci unik. Kunci partisi yang dikombinasikan dengan kunci unik menjamin keunikan item dalam cakupan kontainer.

Misalnya, pertimbangkan kontainer Azure Cosmos DB dengan Email address sebagai batasan kunci unik dan CompanyID sebagai kunci partisi. Saat Anda mengonfigurasi alamat email pengguna dengan kunci unik, setiap item memiliki alamat email unik dalam CompanyID tertentu. Anda tidak bisa membuat dua item dengan alamat email duplikat dan dengan nilai kunci partisi yang sama. Di API Azure Cosmos DB untuk NoSQL, item disimpan sebagai nilai JSON. Nilai JSON adalah kasus yang sensitif. Saat Anda memilih properti sebagai kunci unik, Anda bisa menyisipkan nilai sensitif huruf besar/kecil untuk properti tersebut. Misalnya, jika Anda memiliki kunci unik yang ditentukan pada properti nama, "Gaby" berbeda dari "gaby", dan Anda dapat memasukkan keduanya ke dalam kontainer.

Untuk membuat item dengan alamat email yang sama, tetapi bukan nama depan, nama belakang, dan alamat email yang sama, tambahkan lebih banyak jalur ke kebijakan kunci unik. Alih-alih membuat kunci unik hanya berdasarkan alamat email, Anda juga dapat membuat kunci unik dengan kombinasi nama depan, nama belakang, dan alamat email. Kunci ini dikenal sebagai kunci unik komposit. Dalam hal ini, setiap kombinasi unik dari tiga nilai dalam CompanyID yang diberikan diperbolehkan.

Misalnya, kontainer dapat berisi item dengan nilai-nilai berikut, di mana setiap item mematuhi batasan kunci unik.

CompanyID Nama depan Nama belakang Alamat email
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

Jika Anda mencoba untuk memasukkan item lain dengan kombinasi yang terdaftar di tabel sebelumnya, Anda menerima kesalahan. Pesan kesalahan ini menandakan bahwa batasan kunci unik tidak terpenuhi. Anda menerima Resource with specified ID or name already exists atau Resource with specified ID, name, or unique index already exists sebagai pesan balasan.

Tentukan kunci unik

Anda hanya dapat menentukan kunci unik saat membuat kontainer Azure Cosmos DB. Kunci unik dicakup ke partisi logis. Dalam contoh sebelumnya, jika Anda mempartisi kontainer berdasarkan kode ZIP, Anda akan memperoleh item duplikat pada setiap partisi logis. Pertimbangkan berbagai properti berikut ini saat Anda membuat kunci unik:

  • Anda tidak dapat memperbarui kontainer yang sudah ada untuk menggunakan kunci unik yang berbeda. Dengan kata lain, setelah kontainer dibuat dengan kebijakan kunci unik, kebijakan tersebut tidak dapat diubah.

  • Untuk mengatur kunci unik untuk kontainer yang sudah ada, buat kontainer baru dengan batasan kunci unik. Gunakan alat migrasi data yang sesuai untuk memindahkan data dari kontainer yang sudah ada ke kontainer baru. Untuk kontainer SQL, gunakan pekerjaan salinan kontainer untuk memindahkan data. Untuk kontainer MongoDB, gunakan mongomport.exe atau mongorestore.exe untuk memindahkan data.

  • Kebijakan kunci unik dapat memiliki maksimal 16 nilai jalur. Misalnya, nilainya bisa /firstName, /lastName, dan /address/zipCode. Setiap kebijakan kunci unik dapat memiliki maksimal 10 batasan atau kombinasi kunci unik. Dalam contoh sebelumnya, nama depan, nama belakang, dan alamat email bersama-sama merupakan satu batasan. Batasan ini menggunakan 3 dari 16 jalur yang memungkinkan.

  • Saat kontainer memiliki kebijakan kunci unik, biaya Unit Permintaan (RU) untuk membuat, memperbarui, dan menghapus item sedikit lebih tinggi.

  • Kunci unik tersebar tidak didukung. Jika beberapa nilai jalur unik hilang, nilai tersebut diperlakukan sebagai nilai null, yang termasuk dalam batasan keunikan. Untuk alasan ini, hanya bisa ada satu item dengan nilai null untuk memenuhi batasan ini.

  • Nama kunci uniknya peka huruf besar dan kecil. Misalnya, pertimbangkan kontainer dengan batasan kunci unik yang diatur ke /address/zipcode. Jika data Anda memiliki bidang bernama ZipCode, Azure Cosmos DB menyisipkan "null" sebagai kunci unik karena zipcode tidak sama dengan ZipCode. Karena sensitivitas kasus ini, semua catatan lain dengan ZipCode tidak dapat dimasukkan karena duplikat "null" melanggar batasan kunci unik.

Langkah berikutnya