MongoDB - Sharding: Panduan untuk Pemula
Hai teman-teman, para ahli basis data masa depan! Hari ini, kita akan memulai sebuah perjalanan menarik ke dunia sharding MongoDB. Jangan khawatir jika Anda masih baru dalam programming - saya akan menjadi panduan ramah Anda, dan kita akan mengexplorekan topik ini langkah demi langkah. Pada akhir tutorial ini, Anda akan bisa sharding seperti seorang ahli! Ayo masuk ke dalamnya!
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 keras, dan mencari buku memakan waktu lebih lama. apa yang Anda lakukan? Anda mungkin akan mempertimbangkan untuk mengembangkan ke beberapa ruangan, masing-masing 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 memberikan superpower bagi basis data Anda, memungkinkannya untuk menghandle lebih banyak data dan memproses lebih banyak permintaan daripada yang bisa dikelola 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 mengimplementasikannya.
Konsep Dasar
Sebelum kita masuk ke kode, mari kita familiarisasi dengan beberapa istilah kunci:
- Shard: Satu server atau replica set 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 membuat klaster sharded dasar. Jangan khawatir jika ini terlihat kompleks pada awalnya - kita akan membongkar ini langkah demi langkah!
Langkah 1: Mulai Config Servers
Pertama, kita perlu memulai config server kami. 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 kami:
rs.initiate({
_id: "configReplSet",
members: [{ _id: 0, host: "localhost:27019" }]
})
Ini mengatur config server kami menjadi 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 Replica Sets Shard
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 kami:
mongos --configdb configReplSet/localhost:27019 --port 27017
Ini memulai instance mongos, memberitahukan nya di mana mencari config server.
Langkah 6: Tambahkan Shards ke Klaster
Akhirnya, kita akan menambahkan shard kami ke klaster:
sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27020")
Perintah ini memberitahu mongos tentang shard kami.
Mengaktifkan Sharding untuk Database dan Koleksi
Sekarang klaster sharded kami 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 shards koleksi 'users' berdasarkan field 'username'.
Menyisipkan dan Query Data
Sekarang kita memiliki setup sharded, mari kita sisipkan beberapa data dan lihat bagaimana itu bekerja:
// Hubungkan ke mongos
mongo --port 27017
// Pindah ke database kami
use mydb
// Sisipkan beberapa pengguna
for (let i = 0; i < 10000; i++) {
db.users.insertOne({ username: "user" + i, age: Math.floor(Math.random() * 100) })
}
// Query 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 menawarkan 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 lokalisasi data atau penyimpanan tingkat |
Kesimpulan
Selamat! Anda telah mengambil langkah pertama ke dunia sharding MongoDB. Kita telah menyoroti mengapa sharding penting, bagaimana mengatur klaster sharded dasar, dan bagaimana bekerja dengan koleksi sharded.
Ingat, sharding adalah alat yang kuat, tapi juga menambah kompleksitas ke setup basis data Anda. Selalu berhati-hati dalam pertimbangan apakah Anda memerlukan sharding untuk kasus penggunaan tertentu Anda. Sebagai Anda terus mengembangkan pengetahuan MongoDB Anda, Anda akan menemukan konsep dan teknik sharding yang lebih lanjut.
Terus latih, tetap curiga, dan sebelum Anda tahu, Anda akan menjadi ahli sharding! Selamat coding, para arsitek basis data masa depan!
Credits: Image by storyset