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!

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 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:

  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 mengimplementasikannya.

Konsep Dasar

Sebelum kita masuk ke kode, mari kita familiarisasi dengan beberapa istilah kunci:

  1. Shard: Satu server atau replica set 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 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