Bagikan melalui


Mengoptimalkan performa penulisan di Azure Cosmos DB for MongoDB

BERLAKU UNTUK: MongoDB

Mengoptimalkan performa tulis membantu Anda memaksimalkan Azure Cosmos DB untuk skala tak terbatas MongoDB. Tidak seperti layanan MongoDB terkelola lainnya, API untuk MongoDB secara otomatis dan transparan memecah koleksi Anda untuk Anda (ketika menggunakan koleksi pecahan) untuk menskalakan tak terbatas.

Cara Anda menulis data perlu memperhatikan hal ini dengan paralelisasi dan menyebarkan data di seluruh pecahan untuk mendapatkan penulisan yang terbanyak dari database dan koleksi Anda. Artikel ini menjelaskan praktik terbaik untuk mengoptimalkan performa penulisan.

Sebarkan beban di pecahan Anda

Saat menulis data ke API yang dibelah untuk koleksi MongoDB, data Anda dibagi (dibelah) menjadi irisan kecil dan ditulis untuk setiap pecahan berdasarkan nilai bidang kunci pecahan Anda. Anda dapat menganggap setiap irisan sebagai bagian kecil dari mesin virtual yang hanya menyimpan dokumen yang berisi satu nilai kunci pecahan yang unik.

Jika aplikasi Anda menulis sejumlah besar data ke satu pecahan, ini tidak akan efisien karena aplikasi akan memaksimalkan throughput hanya satu pecahan alih-alih menyebarkan beban di semua pecahan Anda. Beban tulis Anda akan tersebar merata di seluruh koleksi Anda dengan menulis secara paralel dengan banyak dokumen dengan nilai kunci pecahan yang unik.

Salah satu contoh melakukan ini adalah aplikasi katalog produk yang dipecahkan pada bidang kategori. Daripada menulis ke satu kategori (pecahan) pada satu waktu, lebih baik menulis ke semua kategori secara bersamaan untuk mencapai throughput tulis maksimum.

Mengurangi jumlah indeks

Pengindeksan adalah fitur hebat untuk secara drastis mengurangi waktu yang dibutuhkan untuk mengkueri data Anda. Untuk pengalaman kueri yang paling fleksibel, API untuk MongoDB memungkinkan indeks kartubebas pada data Anda secara default untuk membuat kueri terhadap semua bidang dengan sangat cepat. Namun, semua indeks, yang mencakup indeks kartubebas memperkenalkan beban tambahan saat menulis data karena tulis mengubah koleksi dan indeks.

Mengurangi jumlah indeks hanya ke indeks yang Anda butuhkan untuk mendukung kueri Anda akan membuat penulisan Anda lebih cepat dan lebih murah. Sebagai aturan umum, kami merekomendasikan hal-hal berikut:

  • Bidang apa pun yang Anda filter harus memiliki indeks bidang tunggal yang sesuai untuknya. Opsi ini juga memungkinkan pemfilteran multi-bidang.
  • Setiap kelompok bidang yang Anda urutkan harus memiliki indeks komposit untuk grup tersebut.

Set diperintahkan untuk salah pada driver MongoDB

Secara default, driver MongoDB mengatur opsi yang dipesan menjadi "benar" saat menulis data, yang menulis setiap dokumen dalam urutan satu per satu. Opsi ini mengurangi performa tulis karena setiap permintaan tulis harus menunggu yang sebelumnya selesai. Saat menulis data, atur opsi ini ke salah untuk meningkatkan performa.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

Atur untuk ukuran batch optimal dan jumlah thread

Paralelisasi operasi penulisan di banyak utas/proses adalah kunci untuk menskalakan penulisan. API untuk MongoDB menerima penulisan dalam batch hingga 1.000 dokumen untuk setiap proses/utas.

Jika Anda menulis lebih dari 1.000 dokumen sekaligus per proses/utas, fungsi klien seperti insertMany() harus dibatasi pada sekitar 1.000 dokumen. Jika tidak, klien akan menunggu setiap batch untuk berkomitmen sebelum pindah ke batch berikutnya. Dalam beberapa kasus, membagi batch dengan kurang dari atau sedikit lebih dari 1.000 dokumen akan lebih cepat.

Langkah berikutnya