Membuat kunci partisi sintetis

Sebagai praktik terbaik, Anda harus menggunakan kunci partisi yang memiliki banyak nilai berbeda, seperti ratusan atau ribuan. Tujuannya adalah untuk mendistribusikan data dan beban kerja Anda secara merata di seluruh item yang terkait dengan nilai kunci partisi ini. Jika properti seperti itu tidak ada dalam data Anda, Anda dapat membuat kunci partisi sintetis.

Dokumen ini menjelaskan beberapa teknik dasar untuk menghasilkan kunci partisi sintetis untuk kontainer Azure Cosmos DB Anda.

Menggabungkan beberapa properti item

Anda dapat membentuk kunci partisi dengan menggabungkan beberapa nilai properti ke dalam satu properti buatan partitionKey . Kunci ini disebut sebagai kunci sintetis. Misalnya, pertimbangkan contoh dokumen berikut:

{
"deviceId": "abc-123",
"date": 2018
}

Untuk dokumen sebelumnya, salah satu opsinya adalah mengatur /deviceId atau /date sebagai bidang kunci partisi. Gunakan opsi ini, jika Anda ingin mempartisi kontainer Anda berdasarkan ID perangkat atau tanggal. Opsi lain adalah menggabungkan kedua nilai ini ke dalam properti sintetis partitionKey yang digunakan sebagai kunci partisi.

{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}

Dalam skenario dunia nyata, Anda dapat memiliki ribuan item dalam database. Alih-alih menambahkan kunci sintetis secara manual, tentukan logika sisi klien untuk menggabungkan nilai dan menyisipkan kunci sintetis ke dalam item di kontainer Azure Cosmos DB Anda.

Menggunakan kunci partisi dengan akhiran acak

Strategi lain yang mungkin untuk mendistribusikan beban kerja lebih merata adalah menambahkan angka acak di akhir nilai kunci partisi. Saat Anda mendistribusikan item dengan cara ini, Anda dapat melakukan operasi tulis paralel di seluruh partisi.

Contohnya adalah jika kunci partisi mewakili tanggal. Anda dapat memilih angka acak antara 1 dan 400, lalu menggabungkannya sebagai akhiran pada tanggal. Metode ini menghasilkan nilai kunci partisi seperti 2018-08-09.1,2018-08-09.2, dan sebagainya, melalui 2018-08-09.400. Karena Anda mengacak kunci partisi, operasi tulis pada kontainer pada setiap hari tersebar merata di beberapa partisi. Metode ini menghasilkan paralelisme yang lebih baik dan throughput yang lebih tinggi secara keseluruhan.

Menggunakan kunci partisi dengan akhiran yang telah dihitung sebelumnya

Strategi penambahan akhiran acak dapat secara signifikan meningkatkan throughput penulisan, tetapi membuat pembacaan item tertentu menjadi sulit. Anda tidak tahu nilai akhiran yang digunakan saat Anda menulis item. Untuk memudahkan pembacaan item satu per satu, gunakan strategi akhiran yang telah dihitung sebelumnya. Alih-alih menggunakan angka acak untuk mendistribusikan item di antara partisi, gunakan angka yang dihitung berdasarkan sesuatu yang ingin Anda kueri.

Pertimbangkan contoh sebelumnya, di mana kontainer menggunakan tanggal sebagai kunci partisi. Sekarang misalkan bahwa setiap item memiliki Vehicle-Identification-Number atribut (VIN) yang ingin kita akses. Selanjutnya, misalkan Anda sering menjalankan kueri untuk menemukan item dengan VIN, selain tanggal. Sebelum aplikasi Anda menulis item ke kontainer, aplikasi dapat menghitung akhiran hash berdasarkan VIN dan menambahkannya ke tanggal kunci partisi. Perhitungan mungkin menghasilkan angka antara 1 dan 400 yang didistribusikan secara merata. Hasil ini mirip dengan hasil yang dihasilkan oleh metode strategi akhiran acak. Nilai kunci partisi kemudian adalah tanggal yang digabungkan dengan hasil terhitung.

Dengan strategi ini, penulisan tersebar merata di seluruh nilai kunci partisi, dan di seluruh partisi. Anda dapat dengan mudah membaca item dan tanggal tertentu, karena Anda dapat menghitung nilai kunci partisi untuk tertentu Vehicle-Identification-Number. Manfaat dari metode ini adalah Anda dapat menghindari pembuatan satu kunci partisi panas, yaitu kunci partisi yang mengambil semua beban kerja.

Langkah berikutnya

Anda dapat mempelajari selengkapnya tentang konsep partisi di artikel berikut:

Mencoba melakukan perencanaan kapasitas untuk migrasi ke Azure Cosmos DB? Anda dapat menggunakan informasi tentang kluster database Anda yang ada saat ini untuk membuat perencanaan kapasitas.