全部产品
Search
文档中心

ApsaraDB for MongoDB:Konfigurasikan sharding data untuk memaksimalkan kinerja shard

更新时间:Nov 10, 2025

Konfigurasikan sharding data untuk koleksi dalam instansi kluster sharded guna memanfaatkan sepenuhnya ruang penyimpanan dan kinerja komputasi node shard.

Informasi latar belakang

Jika sebuah koleksi tidak di-shard, semua datanya disimpan pada satu node shard. Hal ini mencegah pemanfaatan penuh node shard lainnya dalam hal penyimpanan dan komputasi.

Prasyarat

Instance harus merupakan instance kluster terpecah.

Catatan penggunaan

  • Kemampuan MongoDB untuk memodifikasi kunci shard telah ditingkatkan di berbagai versi:

    • Sebelum versi 4.4: Setelah kunci shard ditetapkan, kunci tersebut tidak dapat dimodifikasi atau dihapus.

    • Mulai dari versi 4.4: Anda dapat menggunakan perintah refineCollectionShardKey untuk menyempurnakan kunci shard dengan menambahkan bidang akhiran.

    • Mulai dari versi 5.0: Perintah reshardCollection diperkenalkan. Perintah ini memungkinkan Anda untuk sepenuhnya mengubah kunci shard dari sebuah koleksi.

  • Setelah Anda mengonfigurasi sharding data, balancer akan membagi data yang memenuhi kriteria. Karena operasi ini mengonsumsi sumber daya instansi, Anda harus melakukannya selama jam non-puncak.

    Catatan

    Sebelum Anda mengonfigurasi sharding data, Anda dapat menetapkan jendela aktif untuk balancer untuk memastikan bahwa balancer berjalan selama jam non-puncak. Untuk informasi lebih lanjut, lihat Tetapkan Jendela Aktif untuk Balancer.

  • Pilihan kunci shard memengaruhi kinerja instansi kluster sharded. Untuk informasi lebih lanjut tentang cara memilih kunci shard, lihat Cara Memilih Kunci Shard dan Kunci Shard.

Strategi sharding

Strategi sharding

Deskripsi

Skenario

Sharding rentang

MongoDB membagi data menjadi chunk berdasarkan rentang nilai kunci shard. Setiap chunk berisi data dalam rentang tertentu.

  • Keuntungan: Mongos dapat dengan cepat menemukan data yang diminta dan meneruskan permintaan ke node shard yang benar.

  • Kerugian: Data mungkin tidak merata didistribusikan di seluruh shard. Ini dapat menyebabkan titik panas baca dan tulis serta tidak memberikan distribusi tulis.

Nilai kunci shard tidak bertambah atau berkurang secara monoton. Kunci shard memiliki kardinalitas tinggi dan frekuensi rendah. Diperlukan kueri rentang.

Sharding berbasis hash

MongoDB menghitung hash dari nilai satu bidang untuk digunakan sebagai nilai indeks. Kemudian membagi data menjadi chunk berdasarkan rentang nilai hash.

  • Keuntungan: Data dapat lebih merata didistribusikan di seluruh node shard. Ini memberikan distribusi tulis.

  • Kerugian: Strategi ini tidak cocok untuk kueri rentang. Selama kueri rentang, permintaan baca harus dikirim ke semua node shard.

Nilai kunci shard bertambah atau berkurang secara monoton. Kunci shard memiliki kardinalitas tinggi dan frekuensi rendah. Penulisan data perlu didistribusikan secara acak. Pembacaan data sangat acak.

Selain kedua strategi sharding ini, Anda juga dapat mengonfigurasi kunci shard gabungan. Sebagai contoh, Anda dapat menggunakan kunci dengan kardinalitas rendah dan kunci yang bertambah secara monoton. Untuk informasi lebih lanjut, lihat Cara Memilih Kunci Shard.

Prosedur

Topik ini menggunakan database `mongodbtest` dan koleksi `customer` sebagai contoh.

  1. Masuk ke instansi kluster sharded menggunakan mongo shell.

  2. Aktifkan sharding untuk database tempat koleksi berada.

    Penting

    Jika instansi Anda menjalankan MongoDB 6.0 atau lebih baru, Anda dapat melewati langkah ini. Untuk informasi lebih lanjut, lihat sh.enableSharding().

    sh.enableSharding("<database>")

    Deskripsi parameter: <database> adalah nama database.

    Contoh:

    sh.enableSharding("mongodbtest")
    Catatan

    Anda dapat menjalankan perintah sh.status() untuk melihat status sharding.

  3. Buat indeks pada bidang kunci shard.

    db.<collection>.createIndex(<keyPatterns>,<options>)

    Deskripsi parameter:

    • <collection>: Nama koleksi.

    • <keyPatterns>: Bidang untuk pengindeksan dan tipe indeks.

      Tipe indeks umum adalah sebagai berikut:

      • 1: Membuat indeks naik.

      • -1: Membuat indeks turun.

      • "hashed": Membuat indeks hash.

    • <options>: Parameter opsional. Untuk informasi lebih lanjut, lihat db.collection.createIndex(). Parameter ini tidak digunakan dalam contoh ini.

    Contoh berikut menunjukkan cara membuat indeks naik:

    db.customer.createIndex({name:1})

    Buat indeks hash:

    db.customer.createIndex({name:"hashed"})
  4. Konfigurasikan sharding data untuk koleksi.

    sh.shardCollection("<database>.<collection>",{ "<key>":<value> } ) 

    Deskripsi parameter:

    • <database>: Nama database.

    • <collection>: Nama koleksi.

    • <key>: Kunci shard. MongoDB melakukan sharding data berdasarkan nilai kunci ini.

    • <value>

      • 1: Menentukan sharding rentang. Strategi ini mendukung kueri rentang yang efisien berdasarkan kunci shard.

      • "hashed": Menentukan sharding hash. Strategi ini mendistribusikan tulis secara merata di seluruh node shard.

    Contoh konfigurasi sharding rentang:

    sh.shardCollection("mongodbtest.customer",{"name":1})

    Contoh konfigurasi sharding hash:

    sh.shardCollection("mongodbtest.customer",{"name":"hashed"})

Apa yang harus dilakukan selanjutnya

Setelah instansi berjalan dan data telah ditulis selama periode waktu tertentu, Anda dapat menjalankan perintah sh.status() di mongo shell untuk melihat distribusi data di seluruh node shard.

Anda juga dapat menjalankan perintah db.stats() untuk melihat penyimpanan data database pada setiap node shard.