MongoDB Sharding: Tutorial Langkah demi Langkah dengan Contoh
⚡ Ringkasan Cerdas
MongoDB Sharding membagi kumpulan data besar menjadi subset yang lebih kecil yang didistribusikan ke beberapa lokasi. MongoDB Instance, mengurangi beban CPU pada server tunggal mana pun. Klaster sharded menggabungkan shard, server konfigurasi, dan router untuk meningkatkan skala penyimpanan dan throughput kueri secara horizontal.
Apa yang dimaksud dengan Sharding MongoDB?
Sharding adalah sebuah konsep di MongoDB, yang membagi kumpulan data besar menjadi kumpulan data kecil menjadi beberapa kumpulan data MongoDB contoh.
Terkadang data di dalamnya MongoDB Ukuran data akan sangat besar sehingga kueri terhadap kumpulan data sebesar itu dapat menyebabkan penggunaan CPU yang tinggi pada server. Untuk mengatasi situasi ini, MongoDB memiliki konsep Sharding, yang pada dasarnya adalah pemisahan kumpulan data menjadi beberapa MongoDB contoh.
Koleksi tersebut, yang ukurannya bisa besar, sebenarnya terbagi menjadi beberapa koleksi, atau yang disebut Shard. Secara logis, semua shard berfungsi sebagai satu koleksi.
Keuntungan Sharding dalam MongoDB
Sebelum mengimplementasikan cluster sharding, ada baiknya memahami mengapa tim mengadopsi sharding. Manfaat utamanya adalah:
- Skalabilitas horizontal: Data didistribusikan ke banyak server komoditas alih-alih memaksa satu mesin untuk terus berkembang menjadi lebih besar.
- Throughput lebih tinggi: Operasi baca dan tulis berjalan secara paralel di seluruh shard, sehingga klaster dapat menangani lebih banyak permintaan per detik.
- Kapasitas penyimpanan yang lebih besar: Kapasitas penyimpanan gabungan dari semua shard dapat menampung kumpulan data yang jauh lebih besar daripada yang dapat disimpan oleh satu server.
- Ketersediaan tinggi: Ketika setiap shard diimplementasikan sebagai set replika, kegagalan satu node tidak akan menyebabkan seluruh cluster mati.
- Beban seimbang: The MongoDB Balancer mendistribusikan ulang potongan data secara otomatis untuk mencegah satu shard menjadi titik panas.
Secara keseluruhan, keunggulan-keunggulan ini menjadikan sharding sebagai pendekatan standar untuk penskalaan. MongoDB melampaui batasan satu server.
Bagaimana Menerapkan Sharding
Shard diimplementasikan dengan menggunakan cluster, yang tidak lain adalah sekelompok MongoDB contoh.
Komponen-komponen dari sebuah Shard meliputi:
- Sekeras – Ini adalah hal yang mendasar, dan ini tidak lain hanyalah a MongoDB instance yang menyimpan subset data. Di lingkungan produksi, semua pecahan harus menjadi bagian dari kumpulan replika.
- Server konfigurasi - Ini adalah sebuah MongoDB instance yang menyimpan metadata tentang cluster, pada dasarnya informasi tentang berbagai hal. MongoDB Instance yang akan menyimpan data shard.
- Sebuah Router - Ini adalah sebuah MongoDB Instance yang pada dasarnya bertanggung jawab untuk mengarahkan kembali perintah yang dikirim oleh klien ke server yang tepat.
Pembagian Langkah demi Langkah Cluster Example
Langkah 1) Buat database terpisah untuk server konfigurasi.
mkdir /data/configdb
Langkah 2) Memulai MongoDB dalam mode konfigurasi. Misalkan kita memiliki server bernama Server D, yang akan menjadi server konfigurasi kita. Kita perlu menjalankan perintah di bawah ini untuk mengkonfigurasi server tersebut sebagai server konfigurasi.
mongod --configdb ServerD:27019
Langkah 3) Mulai instance mongos dengan menentukan server konfigurasi.
mongos --configdb ServerD:27019
Langkah 4) Dari shell mongo, sambungkan ke instance mongos.
mongo --host ServerD --port 27017
Langkah 5) Jika Anda memiliki Server A dan Server B yang perlu ditambahkan ke klaster, jalankan perintah di bawah ini.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Langkah 6) Aktifkan sharding untuk database. Jadi, jika kita perlu melakukan sharding pada database Employeedb, jalankan perintah di bawah ini.
sh.enableSharding("Employeedb")
Langkah 7) Aktifkan sharding untuk koleksi tersebut. Jadi, jika kita perlu melakukan sharding pada koleksi Employee, jalankan perintah di bawah ini.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Cara Memilih Kunci Shard di MongoDB
Kunci shard adalah bidang yang diindeks, atau kumpulan bidang, yang MongoDB Digunakan untuk menentukan shard mana yang menyimpan setiap dokumen. Karena kunci menentukan distribusi data, memilihnya dengan baik adalah keputusan terpenting dalam penerapan sharding. Kunci yang buruk akan memusatkan data dan lalu lintas pada satu shard, sehingga menghilangkan manfaat dari sharding.
Kunci shard yang kuat umumnya memiliki karakteristik sebagai berikut:
- Kardinalitas tinggi: Kolom tersebut harus memiliki banyak kemungkinan nilai sehingga data dapat dibagi menjadi banyak bagian yang lebih detail.
- Frekuensi rendah: Tidak boleh ada satu nilai pun yang mendominasi, jika tidak, dokumen-dokumen yang memiliki nilai yang sama akan menumpuk di satu bagian.
- Perubahan non-monotonik: Kunci yang nilainya selalu meningkat, seperti stempel waktu, mengirim setiap penulisan baru ke shard yang sama, sehingga menciptakan titik panas (hotspot).
MongoDB Mendukung dua strategi sharding berdasarkan kunci. Sharding rentang membagi data ke dalam rentang yang berdekatan dan cocok untuk kueri rentang, sementara sharding hash menerapkan fungsi hash untuk menyebarkan penulisan secara merata di seluruh shard. Tim sering memulai dengan sharding hash ketika penulisan data banyak dan beralih ke sharding rentang ketika pembacaan berbasis rentang mendominasi. Strategi mana pun yang Anda pilih, uji kunci terhadap pola kueri yang realistis sebelum melakukan commit, karena kunci shard tidak dapat diubah dengan mudah setelah data dimuat.
Sharding vs Replikasi dalam MongoDB
Sharding dan replikasi adalah fitur yang saling melengkapi namun berbeda. Tabel di bawah ini menyoroti perbedaannya sehingga Anda dapat menerapkan masing-masing dengan benar, dan dalam praktiknya klaster produksi menggunakan keduanya secara bersamaan.
| Aspek | Sharding | sahutan |
|---|---|---|
| Tujuan | Lakukan penskalaan horizontal dengan membagi data. | Lindungi data dan pastikan data tersebut selalu tersedia. |
| Data pada setiap node | Sebagian kecil (satu bagian) dari data | Salinan lengkap data tersebut |
| Manfaat utama | Kapasitas penyimpanan dan throughput yang lebih besar | Toleransi kesalahan dan penskalaan baca |
| Komponen-komponen kunci | Shard, server konfigurasi, router mongos | Anggota utama dan sekunder |
Singkatnya, sharding menjawab kebutuhan akan skalabilitas, sementara replikasi menjawab kebutuhan akan ketersediaan, dan penerapan yang tangguh menggabungkan keduanya.

