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.
CatatanSebelum 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.
| 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.
| 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.
-
Aktifkan sharding untuk database tempat koleksi berada.
PentingJika 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")CatatanAnda dapat menjalankan perintah
sh.status()untuk melihat status sharding. -
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"}) -
-
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.
