MongoDB - Sharding: Panduan untuk Pemula
Hai sana, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia sharding MongoDB. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan ramah Anda, dan kita akan mengexplorekan topik ini langkah demi langkah. Pada akhir panduan ini, Anda akan bisa melakukan sharding seperti seorang ahli! Ayo masuk ke dalam!
Mengapa Sharding?
Imaginasi Anda menjalankan sebuah perpustakaan yang sibuk. Ketika koleksi bukunya tumbuh, Anda menyadari bahwa menyimpan semua buku di satu ruangan besar menjadi masalah. Itu menjadi ramai, dan mencari buku memerlukan waktu yang lama. Anda akan melakukan apa? Anda mungkin akan mempertimbangkan untuk mengembangkan ke beberapa ruangan, setiap ruangan menyimpan kategori buku yang berbeda. Ini adalah esensi apa yang dilakukan sharding bagi basis data!
Sharding adalah metode distribusi data ke beberapa mesin. Itu seperti memberi basis data Anda superpower, memungkinkannya untuk menghandle lebih banyak data dan memproses lebih banyak permintaan daripada yang bisa dilakukan oleh satu server saja.
Berikut adalah alasan utama mengapa kita menggunakan sharding:
- Skalabilitas: Ketika data Anda tumbuh, Anda dapat menambahkan lebih banyak server untuk menghandle nya.
- Kinerja: Query dapat diproses secara paralel di beberapa server.
- Ketersediaan Tinggi: Jika satu server mati, server lain masih bisa melayani permintaan.
Sharding di MongoDB
Sekarang kita mengerti mengapa sharding penting, mari kita lihat bagaimana MongoDB menerapkannya.
Konsep Dasar
Sebelum kita masuk ke kode, mari kita familiarisasi diri dengan beberapa istilah kunci:
- Shard: Satu server atau set replika yang menyimpan sebagian data.
- Shard Key: Field(s) yang digunakan untuk mendistribusikan data ke shard.
- Chunk: Rentang kontiguous nilai shard key.
- Config Servers: Instance MongoDB khusus yang menyimpan metadata tentang klaster.
- Mongos: Layanan routing yang mengarahkan permintaan ke shard yang sesuai.
Menyiapkan Klaster Sharded
Mari kita melalui proses menyiapkan klaster sharded dasar. Jangan khawatir jika ini terlihat kompleks pada awalnya - kita akan pecahnya langkah demi langkah!
Langkah 1: Mulai Config Servers
Pertama, kita perlu memulai config server kita. Dalam lingkungan produksi, Anda biasanya akan memiliki tiga, tapi untuk contoh ini, kita akan menggunakan satu:
mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb
Perintah ini memulai instance MongoDB sebagai config server, menggunakan port 27019 dan menyimpan data nya di /data/configdb
.
Langkah 2: Inisiasi Config Server Replica Set
Sekarang, mari kita inisiasi config server replica set nya:
rs.initiate({
_id: "configReplSet",
members: [{ _id: 0, host: "localhost:27019" }]
})
Ini menyiapkan config server kita sebagai single-member replica set.
Langkah 3: Mulai Shard Servers
Berikutnya, kita akan memulai dua shard server:
mongod --shardsvr --replSet shard1 --port 27018 --dbpath /data/shard1
mongod --shardsvr --replSet shard2 --port 27020 --dbpath /data/shard2
Perintah ini memulai dua instance MongoDB sebagai shard server di port yang berbeda.
Langkah 4: Inisiasi Shard Replica Sets
Untuk setiap shard, kita perlu inisiasi replica set nya:
// Untuk shard1
rs.initiate({
_id: "shard1",
members: [{ _id: 0, host: "localhost:27018" }]
})
// Untuk shard2
rs.initiate({
_id: "shard2",
members: [{ _id: 0, host: "localhost:27020" }]
})
Langkah 5: Mulai Mongos Router
Sekarang, mari kita mulai router mongos nya:
mongos --configdb configReplSet/localhost:27019 --port 27017
Ini memulai instance mongos, memberitahu nya dimana mencari config server.
Langkah 6: Tambah Shard ke Klaster
Akhirnya, kita akan menambah shard ke klaster:
sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27020")
Perintah ini memberitahu mongos tentang shard kita.
Mengaktifkan Sharding untuk Database dan Koleksi
Sekarang klaster sharded kita sudah disiapkan, mari kita aktifkan sharding untuk database dan koleksi:
// Aktifkan sharding untuk database 'mydb'
sh.enableSharding("mydb")
// Shard koleksi 'users' menggunakan field 'username' sebagai shard key
sh.shardCollection("mydb.users", { "username": 1 })
Ini mengaktifkan sharding untuk database 'mydb' dan shard koleksi 'users' berdasarkan field 'username'.
Memasukkan dan Query Data
Sekarang kita memiliki setup sharded, mari kita masukkan beberapa data dan lihat bagaimana itu bekerja:
// Terhubung ke mongos
mongo --port 27017
// Pindah ke database kita
use mydb
// Masukkan beberapa pengguna
for (let i = 0; i < 10000; i++) {
db.users.insertOne({ username: "user" + i, age: Math.floor(Math.random() * 100) })
}
// Query untuk pengguna tertentu
db.users.find({ username: "user5000" })
Ketika kita menjalankan query ini, mongos akan mengarahkan permintaan ke shard yang sesuai berdasarkan shard key (username).
Metode Sharding
MongoDB menyediakan beberapa metode sharding untuk mendistribusikan data ke shard:
Metode | Deskripsi | Kasus Penggunaan |
---|---|---|
Range Sharding | Membagi data menjadi rentang berdasarkan nilai shard key | Baik untuk shard key dengan cardinality yang bagus dan jarang berubah |
Hash Sharding | Menggunakan hash dari shard key untuk mendistribusikan data | Memastikan distribusi data yang rata, baik untuk shard key yang berubah monotonik |
Zone Sharding | Memungkinkan asociasi rentang shard key dengan shard tertentu | Berguna untuk data lokality atau penyimpanan tingkat |
Kesimpulan
Selamat! Anda baru saja mengambil langkah pertama ke dunia sharding MongoDB. Kita telah menjelajahi mengapa sharding penting, cara menyiapkan klaster sharded dasar, dan cara bekerja dengan koleksi sharded.
Ingat, sharding adalah alat yang kuat, tetapi juga menambah kompleksitas ke setup basis data Anda. Selalu pertimbangkan hati-hati apakah Anda memerlukan sharding untuk kasus penggunaan khusus Anda. Sebagai Anda terus menjalankan perjalanan MongoDB Anda, Anda akan menemui konsep dan teknik sharding yang lebih lanjut.
Terus latih, tetap bersemangat, dan sebelum Anda tahu, Anda akan menjadi ahli sharding! Semangat coding, arsitek basis data masa depan!
Credits: Image by storyset