View a markdown version of this page

Pembuatan indeks - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pembuatan indeks

Membangun indeks di Amazon DocumentDB memerlukan sejumlah keputusan yang harus dibuat:

  • Seberapa cepat itu harus diselesaikan?

  • Bisakah koleksi tidak dapat diakses saat build sedang berlangsung?

  • Berapa banyak daya komputasi instans yang dapat dialokasikan ke build?

  • Jenis indeks apa yang harus dibuat?

Bagian ini membantu Anda menjawab pertanyaan-pertanyaan ini dan memberikan perintah dan contoh pemantauan untuk membuat indeks Amazon DocumentDB pada koleksi cluster berbasis instans Anda.

Pedoman

Pedoman berikut mencakup batasan dasar dan pengorbanan konfigurasi saat membuat indeks baru:

  • Dukungan versi Amazon DocumentDB - Meskipun pengindeksan pekerja tunggal didukung di semua versi Amazon DocumentDB, beberapa pengindeksan pekerja hanya didukung di Amazon DocumentDB versi 4.0 dan 5.0.

  • Trade-off kinerja - Meningkatkan jumlah pekerja dalam proses pembuatan indeks meningkatkan pemanfaatan CPU dan membaca IO pada instance utama database Amazon DocumentDB Anda. Sumber daya yang dibutuhkan untuk membuat indeks baru tidak akan tersedia untuk beban kerja Anda yang sedang berjalan.

  • Cluster elastis - Pengindeksan paralel tidak didukung pada kluster elastis Amazon DocumentDB.

  • Pekerja maksimum - Jumlah maksimum pekerja yang dapat Anda konfigurasi tergantung pada ukuran instance utama Anda di cluster database Anda. Ini adalah setengah dari jumlah total vCPU pada instance utama cluster database Anda. Misalnya, Anda dapat menjalankan maksimal 32 pekerja pada instance db.r6g.16xlarge yang memiliki 64 vCPU.

catatan

Build indeks paralel didukung pada instance 2xlarge ke atas.

  • Pekerja minimum - Jumlah minimum pekerja yang dapat Anda konfigurasi adalah satu. Pengaturan default untuk pembuatan indeks pada cluster berbasis instance adalah dua pekerja. Namun, Anda dapat mengurangi jumlah pekerja menjadi satu dengan menggunakan opsi “utas pekerja”. Ini akan menjalankan proses dengan satu pekerja.

  • Kompresi indeks - Amazon DocumentDB tidak mendukung kompresi indeks. Ukuran data untuk indeks mungkin lebih besar daripada saat Anda menggunakan opsi lain.

  • Mengindeks beberapa koleksi - Setengah dari vCPU pada instance utama cluster database Anda dapat digunakan untuk pekerja yang dikonfigurasi yang melakukan pembuatan indeks pada beberapa koleksi.

  • Jenis indeks - Lihat Jenis Indeks daftar jenis indeks yang didukung di Amazon DocumentDB.

Jenis build indeks

Empat jenis build indeks adalah:

  • Foreground: Pembuatan indeks latar depan memblokir semua operasi database lain pada koleksi tempat indeks dibuat, hingga pembuatan indeks selesai. Build latar depan Amazon DocumentDB terdiri dari lima tahap.

  • Foreground (unique): Build indeks latar depan dokumen tunggal (unik) memblokir operasi database lain seperti build latar depan biasa. Berbeda dengan build latar depan dasar, build unik menggunakan tahap tambahan (kunci pengurutan 2) untuk mencari kunci duplikat. Build latar depan (unik) terdiri dari enam tahap.

  • Latar Belakang: Build indeks latar belakang memungkinkan operasi database lainnya berjalan di latar depan saat indeks sedang dibuat. Build latar belakang Amazon DocumentDB terdiri dari delapan tahap.

  • Latar belakang (unik): Build indeks latar belakang dokumen tunggal (unik) memungkinkan operasi database lain berjalan di latar depan saat indeks sedang dibuat. Tidak seperti build latar belakang dasar, build unik menggunakan tahap tambahan (kunci pengurutan 2) untuk mencari kunci duplikat. Build latar belakang (unik) terdiri dari sembilan tahap.

Jenis build indeks default adalah latar depan.

Untuk membangun indeks di latar belakang, Anda menambahkan parameter “background”: true saat membuat indeks.

Memulai

Untuk memulai pembuatan indeks pada koleksi, gunakan perintah createIndexes. Secara default, perintah akan menjalankan dua pekerja paralel yang meningkatkan kecepatan proses pembuatan indeks sebanyak dua kali.

Misalnya, proses perintah berikut menunjukkan cara membuat indeks untuk bidang “user_name” dalam dokumen dan meningkatkan kecepatan proses pengindeksan menjadi empat pekerja:

  1. Buat indeks di latar belakang menggunakan dua pekerja paralel di cluster:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "background":true }]})
  2. Untuk mengoptimalkan kecepatan proses pembuatan indeks, Anda dapat menentukan jumlah pekerja dengan menggunakan opsi “thread pekerja” (“pekerja”:<number>) dalam perintah db.runCommand createIndexes.

    Tingkatkan kecepatan proses menjadi empat pekerja paralel:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
catatan

Semakin tinggi jumlah pekerja, semakin cepat pembuatan indeks berlangsung. Namun, semakin tinggi jumlah pekerja meningkat, semakin tinggi beban meningkat pada vCPU dan membaca IO dari instance utama Anda. Pastikan klaster Anda cukup disediakan untuk menangani beban yang meningkat tanpa menurunkan beban kerja lainnya.

Status kemajuan pengindeksan

Proses pembuatan indeks bekerja dengan menginisialisasi, memindai koleksi, menyortir kunci, dan, akhirnya, memasukkan kunci melalui pembuat indeks. Prosesnya memiliki hingga enam tahap saat Anda menjalankannya di latar depan, dan hingga sembilan tahap saat Anda menjalankannya di latar belakang. Anda dapat melihat metrik status seperti penyelesaian persentase, jumlah total blok penyimpanan yang dipindai, kunci yang diurutkan, dan kunci yang disisipkan berdasarkan tahap demi tahap.

Pantau kemajuan pada proses pengindeksan dengan menggunakan perintah db.currentTop () di shell mongo. Penyelesaian 100% dari tahap terakhir menunjukkan bahwa semua indeks telah berhasil dibuat:

db.currentOp({"command.createIndexes": { $exists : true } })
catatan

Melihat status kemajuan pengindeksan hanya didukung di Amazon DocumentDB 5.0.

Tahapan pembuatan indeks

Stage Latar depan Latar depan (unik) Latar Belakang Latar Belakang (unik)
Inisialisasi 1 1 1 1
indeks bangunan: menginisialisasi 2 2 2 2
indeks bangunan: koleksi pemindaian 3 3 3 3
indeks bangunan: kunci penyortiran 1 4 4 4 4
indeks bangunan: kunci penyortiran 2 5 5
indeks bangunan: memasukkan kunci 5 6 5 6
memvalidasi: indeks pemindaian 6 7
memvalidasi: menyortir tupel 7 8
memvalidasi: koleksi pemindaian 8 9
  • inisialisasi - createIndex sedang mempersiapkan pembuat indeks. Fase ini harus sangat singkat.

  • indeks bangunan: menginisialisasi - Pembangun indeks sedang mempersiapkan untuk membuat indeks. Fase ini harus sangat singkat.

  • indeks bangunan: koleksi pemindaian - Pembuat indeks melakukan pemindaian koleksi untuk mengumpulkan kunci indeks. Satuan ukuran adalah “blok”.

catatan

Jika lebih dari satu pekerja dikonfigurasi untuk build indeks, itu akan ditampilkan di tahap ini. Tahap “pengumpulan pemindaian” adalah satu-satunya tahap yang menggunakan banyak pekerja selama proses pembuatan indeks. Semua tahapan lainnya akan menampilkan satu pekerja.

  • indeks bangunan: kunci penyortiran 1 - Pembuat indeks menyortir kunci indeks yang dikumpulkan. Satuan ukuran adalah “kunci”.

  • indeks bangunan: kunci penyortiran 2 - Pembuat indeks menyortir kunci indeks yang dikumpulkan yang sesuai dengan tupel mati. Fase ini hanya ada untuk bangunan indeks yang unik. Satuan ukuran adalah “kunci”.

  • indeks bangunan: memasukkan kunci - Pembuat indeks memasukkan kunci indeks ke dalam indeks baru. Satuan ukuran adalah “kunci”.

  • memvalidasi: indeks pemindaian - createIndex memindai indeks untuk menemukan kunci yang perlu divalidasi. Satuan ukuran adalah “blok”.

  • memvalidasi: menyortir tupel - createIndex menyortir output dari fase pemindaian indeks.

  • memvalidasi: koleksi pemindaian - createIndex memindai koleksi untuk memvalidasi kunci indeks yang ditemukan dalam dua fase sebelumnya. Satuan ukuran adalah “blok”.

Contoh keluaran pembuatan indeks

Dalam contoh keluaran berikut (membangun indeks latar depan), status pembuatan indeks ditampilkan. Bidang “msg” merangkum kemajuan build dengan menunjukkan tahapan dan persentase penyelesaian build. Bidang “pekerja” menunjukkan jumlah pekerja yang digunakan selama tahap pembuatan indeks tersebut. Bidang “kemajuan” menunjukkan angka aktual yang digunakan untuk menghitung persentase penyelesaian.

catatan

Bidang IndexBuildName “saat ini”, “msg”, dan “kemajuan” tidak didukung di Amazon DocumentDB versi 4.0.

{ "inprog" : [{ … "command": { "createIndexes": "test", "indexes": [{ "v": 2, "key": { "user_name": 1 }, "name": "user_name_1" }], "lsid": { "id": UUID("094d0fba-8f41-4373-82c3-7c4c7b5ff13b") }, "$db": "test" }, "currentIndexBuildName": user_name_1, "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%", "workers": 1, "progress": { "done": 656861, "total": 1003520 }, … ], "ok" : 1 }

Sumber daya pemecahan masalah

Lihat sumber daya berikut tentang pemecahan masalah pembuatan indeks: