View a markdown version of this page

Mengelola indeks Amazon DocumentDB - Amazon DocumentDB

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

Mengelola indeks Amazon DocumentDB

Pembuatan indeks Amazon DocumentDB

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

  • Seberapa cepat perlu diselesaikan?

  • Bisakah koleksi tidak dapat diakses saat pembuatan sedang berlangsung?

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

  • Apa jenis indeks yang harus dibuat?

Bagian ini membantu Anda menjawab pertanyaan-pertanyaan ini dan menyediakan perintah dan contoh pemantauan untuk membuat indeks Amazon DocumentDB pada koleksi cluster berbasis instance 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, pengindeksan beberapa pekerja hanya didukung di Amazon DocumentDB versi 4.0, 5.0, dan 8.0.

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

  • Cluster elastis - Pengindeksan paralel tidak didukung di cluster 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 instans db.r6g.16xlarge yang memiliki 64 vCPU.

    catatan

    Pekerja paralel tidak didukung pada kelas instance 2xlarge dan yang lebih rendah.

  • 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 - Untuk penjelasan lengkap tentang jenis indeks yang didukung di Amazon DocumentDB, lihat Cara mengindeks di Amazon DocumentDB di Blog AWS Database.

Memulai

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

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 menggunakan dua pekerja paralel di cluster:

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

    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 peningkatan beban pada vCPU dan baca IO instans utama Anda. Pastikan cluster 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 ketika Anda menjalankannya di latar depan, dan hingga sembilan tahap ketika Anda menjalankannya di latar belakang. Anda dapat melihat metrik status seperti persentase penyelesaian, jumlah total blok penyimpanan yang dipindai, kunci yang diurutkan, dan kunci yang disisipkan berdasarkan tahap demi tahap.

Pantau kemajuan pada proses pengindeksan dengan menggunakan db.currentOp() perintah 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.

Jenis pembuatan indeks

Empat jenis build indeks adalah:

  • Fore ground — Pembuatan indeks latar depan memblokir semua operasi database lainnya hingga indeks dibuat. Pembuatan latar depan Amazon DocumentDB terdiri dari lima tahap.

  • Latar Depan (unik) — Indeks latar depan dokumen tunggal (unik) memblokir operasi database lainnya seperti pembuatan latar depan biasa. Berbeda dengan build latar depan dasar, build unik menggunakan tahap tambahan (tombol pengurutan 2) untuk mencari kunci duplikat. Bangunan latar depan (unik) terdiri dari enam tahap.

  • Lat ar Belakang — Pembuatan indeks latar belakang memungkinkan operasi database lain berjalan di latar depan saat indeks sedang dibuat. Pembuatan latar belakang Amazon DocumentDB terdiri dari delapan tahap.

  • Latar belakang (unik) - Pembuatan indeks latar belakang dokumen tunggal (unik) memungkinkan operasi database lain berjalan di latar depan saat indeks sedang dibuat. Berbeda dengan build latar belakang dasar, build unik menggunakan tahap tambahan (menyortir kunci 2) untuk mencari kunci duplikat. Pembuatan latar belakang (unik) terdiri dari sembilan tahap.

Tahap 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: memindai koleksi

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: memindai koleksi

8

9

  • menginisialisasi - CreateIndex sedang mempersiapkan pembuat indeks. Fase ini harus sangat singkat.

  • indeks bangunan: inisialisasi - Pembuat indeks sedang bersiap untuk membuat indeks. Fase ini harus sangat singkat.

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

    catatan

    Jika lebih dari satu pekerja dikonfigurasi untuk build indeks, itu ditampilkan dalam tahap ini. Tahap “pemindaian koleksi” 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 ukurannya adalah “kunci”.

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

  • membangun indeks: memasukkan kunci - Pembuat indeks memasukkan kunci indeks ke dalam indeks baru. Satuan ukurannya adalah “kunci”.

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

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

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

Contoh keluaran build indeks

Dalam contoh output berikut (build indeks latar depan), status pembuatan indeks ditampilkan. Bidang “msg” merangkum kemajuan pembangunan dengan menunjukkan tahap 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 “currentIndexBuildName”, “msg”, dan “progress” 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 }

Mempertahankan indeks Amazon DocumentDB

Bloat indeks

Amazon DocumentDB menggunakan Kontrol Multi-Version Konkurensi (MVCC) untuk mengelola transaksi bersamaan. Ketika dokumen dihapus atau diperbarui, versi sebelumnya tetap dalam koleksi dan indeks sebagai versi “mati”. Proses pengumpulan sampah secara otomatis mengambil kembali ruang dari versi mati ini untuk operasi di masa mendatang.

Indeks kembung terjadi ketika indeks koleksi menjadi lebih besar karena akumulasi entri indeks yang mati atau usang atau fragmentasi di dalam halaman. Persentase yang dilaporkan mewakili jumlah ruang indeks yang dapat digunakan oleh entri indeks di masa mendatang. Kembung ini menghabiskan ruang di cache buffer dan penyimpanan. Jika Anda ingin menghapus kembung, Anda perlu membangun kembali indeks.

contoh Contoh

Jalankan perintah berikut untuk menentukan penyimpanan yang tidak digunakan untuk indeks Anda:

db.coll.aggregate({$indexStats:{}});

Hasilnya terlihat mirip dengan ini:

{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" : 409600, "unusedSizePercent" : 49.51 } }

Anda dapat membangun kembali indeks tanpa downtime menggunakan reIndex perintah, yang memerlukan pemindaian seluruh koleksi. Lihat Pemeliharaan indeks menggunakan ReIndex.

Pemeliharaan indeks menggunakan ReIndex

reIndexadalah perintah yang digunakan untuk membangun kembali indeks. Hal ini biasanya digunakan ketika indeks telah rusak atau tidak efisien. Seiring waktu, indeks dapat mengakumulasi ruang yang tidak digunakan karena banyak pembaruan, penyisipan, atau penghapusan, yang menyebabkan kinerja menurun. Pengindeksan ulang membantu menghapus ruang yang tidak terpakai dan mengembalikan efisiensi indeks.

Pedoman ReIndex

  • reIndexhanya didukung di Amazon DocumentDB 5.0.

  • Amazon DocumentDB mendukung reindex satu indeks di latar belakang, memungkinkan untuk beberapa pekerja. Indeks lama dapat digunakan oleh kueri saat reIndex proses berjalan.

  • Amazon DocumentDB mendukung pengindeksan laporan kemajuan melalui. currentOp Anda dapat melihat tahapan pembuatan indeks yang mirip dengan yang Tahap pembuatan indeks dilihat selama pembuatan indeks. Satu-satunya perbedaan adalah reIndex selalu memiliki delapan tahap, terlepas dari apakah itu unik atau tidak. Tidak ada tahap “indeks bangunan: menyortir kunci 2".

  • reIndexdapat berjalan bersamaan dengan perintah apa pun kecuali perintah terkait indeks pada koleksi yang sama:createIndexes,, dropIndexescollMod, dan. renameCollection

  • reIndexsaat ini tidak didukung untuk teks, geospasial, vektor, dan indeks parSIAL.

Pembuatan ReIndex

Gunakan perintah berikut untuk membangun kembali indeks Anda:

db.runCommand({ reIndex: "collection-name", index: "index-name"})

Secara opsional, Anda juga dapat mengontrol jumlah pekerja yang ditugaskan untuk proses pembangunan kembali:

db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })