全部产品
Search
文档中心

ApsaraDB for MongoDB:Fitur baru MongoDB 8.0

更新时间:Jun 27, 2025

Topik ini menjelaskan fitur baru dan optimasi dalam MongoDB 8.0.

Pratinjau cepat

Topik ini memperkenalkan MongoDB 8.0 dari aspek-aspek berikut:

Untuk informasi lebih lanjut, lihat Catatan Rilis MongoDB 8.0.

TCMalloc Tingkat Lanjut

MongoDB 8.0 menggunakan TCMalloc Tingkat Lanjut:

  • Penyesuaian mekanisme caching: TCMalloc Tingkat Lanjut menggunakan cache setiap CPU alih-alih setiap thread untuk mengurangi fragmentasi memori dan memungkinkan database berjalan dengan beban yang lebih berat.

  • Mekanisme pelepasan memori: TCMalloc Tingkat Lanjut membuat thread backend yang mencoba melepaskan memori kembali ke sistem operasi setiap detik.

    Parameter tcmallocReleaseRate menentukan laju pelepasan memori, diukur dalam bytes/s. Sebelum MongoDB 8.0, nilai parameter ini adalah angka samar antara 1-10. Nilai default tcmallocReleaseRate di ApsaraDB for MongoDB adalah 10485760, atau 10 MB. Bahkan jika nilai parameter ini adalah 0, sebagian memori tetap dilepaskan. Anda dapat menyesuaikan nilai ini sesuai kebutuhan bisnis Anda.

Optimasi kinerja replikasi

"Majority" write concern

Mulai MongoDB 8.0, ketika writeConcern disetel ke majority, MongoDB mengembalikan oplog setelah ditulis ke sebagian besar anggota set replika, tanpa menunggu perubahan diterapkan terlebih dahulu. Ini meningkatkan kinerja penulisan dalam mode majority.

Oleh karena itu, jika aplikasi membaca data dari node sekunder segera setelah menerima konfirmasi penulisan majority, hasil yang dikembalikan mungkin tidak termasuk konten yang diubah oleh operasi penulisan tersebut.

Buffer oplog

Node sekunder menulis dan menerapkan setiap batch oplog secara paralel. Ketika thread Writer membaca entri oplog baru dari node primer dan menulisnya ke oplog lokal, thread Applier secara asinkron menerapkan perubahan ini ke database lokal. Hal ini meningkatkan throughput replikasi node sekunder.

Oleh karena itu, metrik terkait dalam serverStatus juga telah berubah, menjadi buffer metrics.repl.buffer.write dan metrics.repl.buffer.apply.

Optimasi kinerja resharding

Kinerja reshardCollection ditingkatkan. Anda dapat menggunakan perintah ini untuk mengubah kunci shard koleksi dan distribusi data.

MongoDB 8.0 mendukung opsi forceRedistribution, yang memungkinkan melakukan resharding pada koleksi dengan kunci shard yang sama seperti sebelumnya dan mendistribusikan ulang data ke shard baru. Proses ini lebih cepat daripada memigrasikan chunk ke rentang tertentu. Anda dapat menggunakan opsi ini bersama dengan opsi zones untuk memigrasikan data ke zona tertentu.

db.adminCommand({
    reshardCollection: "db.coll",
    key: { shard_key: "hashed" },
    forceRedistribution: true
})
Catatan

Pembuatan indeks selama resharding dapat menyebabkan pembuatan indeks gagal tanpa pesan kesalahan eksplisit. Hindari pembuatan indeks selama resharding atau pastikan pembuatan indeks selesai sebelum resharding.

Selama tahap pengejaran oplog inkremental, shard sumber memblokir penulisan ke koleksi hanya jika waktu operasi tersisa diperkirakan dalam dua detik, menunggu shard tujuan menyelesaikan pengejaran. Namun, jika bisnis Anda dapat menerima periode pemblokiran yang lebih lama, seperti selama waktu henti layanan atau jendela pemeliharaan, Anda dapat menggunakan perintah commitReshardCollection untuk melarang penulisan ke koleksi ini terlebih dahulu, mempercepat penyelesaian proses resharding.

Untuk informasi lebih lanjut tentang alur kernel resharding, lihat Proses Resharding. Untuk informasi lebih lanjut tentang operasi terkait resharding, lihat Meng-shard Koleksi.

Sharding

Selain optimasi kinerja resharding, MongoDB 8.0 mengoptimalkan sharding dari aspek-aspek berikut:

  • Hash sharding membuat 1 chunk untuk setiap shard secara default. Sebelum MongoDB 8.0, 2 chunk dibuat secara default.

  • Perintah dbhash dapat dijalankan pada shard.

  • Perintah findAndModify dan deleteOne dapat menggunakan kunci shard parsial sebagai predikat kueri.

  • Saat menggunakan perintah updateOne dengan upsert disetel ke true pada koleksi yang di-shard, Anda dapat mengecualikan semua kunci shard dalam predikat kueri.

  • Anda dapat menggunakan perintah unshardCollection atau metode sh.unshardCollection() untuk membatalkan operasi sharding untuk koleksi yang ada. Ini memindahkan semua dokumen dalam koleksi ke shard tertentu atau shard dengan jumlah data paling sedikit.

  • Anda dapat menggunakan perintah moveCollection untuk memindahkan koleksi yang tidak di-shard ke shard tertentu, tanpa dibatasi oleh shard utama. Namun, koleksi time series dan koleksi terenkripsi yang dapat di-query tidak dapat dipindahkan, dan blokir penulisan koleksi berlangsung sekitar 2 detik.

  • Perintah database dan fungsi helper mongosh berikut didukung.

    Perintah

    Fungsi helper mongosh

    Deskripsi

    moveCollection

    sh.moveCollection()

    Memindahkan koleksi yang tidak di-shard ke shard tertentu.

    unshardCollection

    sh.unshardCollection()

    Membatalkan operasi sharding untuk koleksi yang sudah di-shard dan memindahkan data koleksi ke shard tertentu.

    abortMoveCollection

    sh.abortMoveCollection()

    Menghentikan operasi moveCollection yang sedang berlangsung.

    abortUnshardCollection

    sh.abortUnshardCollection()

    Menghentikan operasi unshardCollection yang sedang berlangsung.

    Tidak ada

    sh.shardAndDistributeCollection()

    Meng-shard koleksi dan segera mendistribusikan ulang data dengan kunci shard yang ada.

    Mempercepat migrasi data. Fungsi helper ini memiliki hasil yang sama dengan shardCollection bersama dengan reshardCollection.

Pencatatan log

Bidang workingMillis ditambahkan ke log kueri lambat untuk menunjukkan waktu yang diperlukan untuk operasi aktual.

Berbeda dengan opsi durationMillis yang menunjukkan latensi operasi total, workingMillis tidak termasuk waktu yang dikonsumsi oleh faktor-faktor seperti penantian kunci atau pengaturan lalu lintas.

Agregasi

Konversi BinData

Anda dapat menggunakan operator $convert untuk melakukan konversi berikut:

  • Mengonversi nilai string menjadi nilai binData.

  • Mengonversi nilai binData menjadi nilai string.

Selain itu, ekspresi $toUUID menyediakan sintaksis yang disederhanakan untuk mengonversi nilai string menjadi nilai UUID.

$queryStats

Tahap $queryStats mengembalikan statistik untuk kueri yang direkam dan mengoptimalkan pelacakan serta pelaporan metrik dalam stream perubahan.

Keamanan database

Enkripsi yang dapat di-query: kueri rentang

Enkripsi yang dapat di-query mendukung kueri rentang pada bidang terenkripsi dengan $lt, $lte, $gt, atau $gte.

Antrian masuk

MongoDB 8.0 memperkenalkan antrian baru untuk kontrol akses masuk (ingressAdmissionControllerTicketPoolSize), yang menunjukkan bahwa operasi yang dikirim ke database dari jaringan masuk ke antrian masuk.

Antrian masuk tidak dibatasi secara default. Anda dapat menyesuaikan nilai maksimum antrian untuk mengizinkan permintaan antrian.

Optimasi lainnya

  • Query Shape baru diperkenalkan. Query shape sebelumnya disebut plan cache query shape. Pengoptimal kueri menggunakan pengaturan kueri sebagai informasi input tambahan, yang memengaruhi pemilihan rencana kueri akhir.

    • setQuerySettings mencakup pengaturan kueri:

      • Tentukan pemilihan indeks. MongoDB 8.0 tidak mengizinkan Anda menggunakan planCacheSetFilter untuk menyetel index filter.

      • Tentukan pengaturan pengaturan lalu lintas. Anda dapat menggunakan opsi reject untuk menyetel penolakan untuk Query Shape tertentu.

    • removeQuerySettings digunakan untuk menghapus pengaturan kueri.

    • $querySettings digunakan untuk melihat pengaturan kueri.

  • Perintah explain() mencakup waktu yang dihabiskan untuk optimasi rencana kueri dalam queryPlanner.optimizationTimeMillis, diukur dalam milidetik.

  • Parameter baru defaultMaxTimeMS menentukan batas waktu default untuk satu operasi baca untuk selesai, diukur dalam milidetik.

    • Operasi yang berlaku:

      • find

      • aggregate (tidak termasuk tahap $merge dan $out)

      • count

      • distinct

      • dbHash

    • Jika klien menentukan maxTimeMS, defaultMaxTimeMS tidak lagi berlaku untuk operasi ini.

  • Perintah baru bulkWrite dapat melakukan beberapa operasi insert, update, dan delete pada beberapa koleksi dalam satu permintaan.

  • updateOne mendukung pengurutan dengan opsi sort.

  • Indeks TTL dapat dibuat pada koleksi capped.

  • Insert massal non-transaksional tidak lagi menghasilkan oplog terpisah tetapi diproses secara batch dalam satu oplog. Semua dokumen yang dimasukkan memiliki clusterTime yang sama dalam peristiwa stream perubahan. Ini meningkatkan kinerja insert massal dan menghindari penundaan replikasi yang mungkin disebabkan oleh pemutaran ulang beberapa oplog dari node sekunder.

  • Operasi DDL bersamaan dapat dilakukan pada koleksi berbeda dalam database yang sama.

  • Menambahkan atau menghapus shard diblokir saat operasi DDL dilakukan pada kluster yang di-shard, seperti reshardCollection yang memodifikasi koleksi. Anda hanya dapat melakukan tindakan ini setelah operasi DDL.

  • Pembuatan indeks ditingkatkan dengan pelaporan kesalahan yang lebih cepat dan kemampuan pemulihan bencana yang lebih kuat.

    Tindakan

    MongoDB 8.0

    Sebelum MongoDB 8.0

    Situasi untuk menghentikan pembuatan indeks setelah mendeteksi kesalahan

    Kesalahan indeks yang terdeteksi selama fase pemindaian koleksi (kecuali kesalahan kunci duplikat) dikembalikan segera, lalu pembuatan indeks dihentikan.

    MongoDB 8.0 membantu Anda dengan cepat mendiagnosis kesalahan indeks. Misalnya, jika format nilai indeks yang tidak kompatibel ditemukan, kesalahan ini dikembalikan segera.

    Sebelum MongoDB 8.0, kesalahan indeks yang terdeteksi selama fase pemindaian koleksi dikembalikan dalam fase commit, yang terjadi di akhir pembuatan indeks.

    Dibandingkan dengan MongoDB 8.0, versi sebelumnya mungkin memerlukan waktu lebih lama untuk mengembalikan kesalahan pembuatan indeks karena kesalahan dikembalikan di akhir pembuatan indeks dalam fase commit.

    Penyebaran Tangguh

    Ketangguhan penyebaran ditingkatkan. Jika kesalahan pembuatan indeks terjadi, anggota sekunder dapat meminta anggota primer untuk menghentikan pembuatan indeks, dan mereka tidak crash.

    Permintaan untuk menghentikan pembuatan indeks tidak selalu memungkinkan. Jika anggota telah memberikan suara untuk melakukan commit indeks, anggota sekunder tidak dapat meminta untuk menghentikan pembuatan indeks, dan mereka crash. Situasi ini mirip dengan yang ada di MongoDB 7.0 dan versi sebelumnya.

    Kesalahan pembuatan indeks dapat menyebabkan anggota sekunder crash.

    Ruang Disk

    Manajemen ruang disk dioptimalkan untuk pembuatan indeks. Jika ruang disk yang tersedia kurang dari nilai minimum yang ditentukan dalam parameter indexBuildMinAvailableDiskSpaceMB, pembuatan indeks mungkin berhenti secara otomatis.

    Jika anggota telah memberikan suara untuk melakukan commit indeks, pembuatan indeks tidak berhenti.

    Pembuatan indeks juga berhenti ketika ruang disk tidak mencukupi.