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!

MongoDB - Sharding

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:

  1. Skalabilitas: Ketika data Anda tumbuh, Anda dapat menambahkan lebih banyak server untuk menghandle nya.
  2. Kinerja: Query dapat diproses secara paralel di beberapa server.
  3. 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:

  1. Shard: Satu server atau set replika yang menyimpan sebagian data.
  2. Shard Key: Field(s) yang digunakan untuk mendistribusikan data ke shard.
  3. Chunk: Rentang kontiguous nilai shard key.
  4. Config Servers: Instance MongoDB khusus yang menyimpan metadata tentang klaster.
  5. 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