Apa itu Database Sharding? 

Sharding adalah teknik partisi data horizontal yang memecah kumpulan data yang sangat besar menjadi bagian-bagian yang lebih kecil, lebih mudah dikelola, dan lebih cepat yang disebut “shard”. Setiap shard adalah database yang independen, dan secara kolektif, semua shard membentuk satu database logis. 

Analoginya adalah memikirkan sebuah buku besar raksasa. Alih-alih menyimpan semua catatan dalam satu buku yang sangat tebal dan lambat untuk dibuka, catatan tersebut dibagi ke dalam beberapa buku yang lebih tipis berdasarkan kriteria tertentu, misalnya berdasarkan huruf awal nama pelanggan (A-F, G-L, dan seterusnya). Setiap buku yang lebih tipis ini dapat disimpan di lokasi yang berbeda dan dikelola oleh orang yang berbeda, sehingga mempercepat proses pencarian dan pembaruan. 

Konsep kunci yang membedakan sharding adalah partisi horizontal. Ini berbeda dengan partisi vertikal, yang memisahkan kolom-kolom tabel ke dalam kelompok-kolom yang berbeda, tetap dalam server yang sama. Sharding secara spesifik memotong baris dari sebuah tabel dan mendistribusikannya di beberapa server database yang terpisah, masing-masing dengan CPU, memori, dan disk storage-nya sendiri. 

Mekanisme distribusi ini dikendalikan oleh “kunci shard” (shard key). Pemilihan kunci shard adalah keputusan arsitektural yang paling kritis. Kunci shard yang buruk dapat menyebabkan distribusi data yang tidak merata, di mana satu shard menjadi overloaded (disebut “hotspot”) sementara shard lainnya menganggur, sehingga menghilangkan manfaat dari sharding. 

Mengapa database sharding penting? 

Pentingnya sharding berakar pada hukum fisika dan ekonomi yang mendasari infrastruktur TI. Sebuah server tunggal, tidak peduli seberapa kuatnya, memiliki batas maksimum untuk skalabilitas vertikal (scale-up). Ada batasan praktis pada kecepatan CPU, kapasitas RAM, dan kinerja disk I/O yang dapat dimasukkan ke dalam satu mesin. Selain itu, biaya untuk meningkatkan server ke level yang lebih tinggi tumbuh secara eksponensial. 

Ketika aplikasi seperti platform media sosial, layanan fintech, atau game online multi-pemain mengalami pertumbuhan pengguna dan data yang eksponensial, database tunggal akan cepat menjadi bottleneck. Kinerja akan menurun, waktu respons membengkak, dan pada akhirnya, aplikasi dapat mengalami downtime yang merugikan. 

Sharding memberikan jalan keluar dengan mengadopsi pendekatan skalabilitas horizontal (scale-out). Alih-alih mengganti server dengan yang lebih besar, organisasi dapat menambahkan lebih banyak server komoditas yang lebih murah ke dalam kumpulan shard. Pendekatan ini tidak hanya lebih hemat biaya dalam jangka panjang tetapi juga menawarkan jalur pertumbuhan yang hampir tak terbatas, asalkan arsitektur sharding dirancang dengan baik. Dalam konteks komputasi awan, sharding menjadi sangat penting karena selaras dengan filosofi elastisitas cloud, memungkinkan sumber daya komputasi dan penyimpanan diskalakan secara dinamis sesuai beban. 

Manfaat Database Sharding: 

  • Peningkatan Kinerja dan Throughput 

Beban query terdistribusi ke beberapa node. Query yang menargetkan shard tertentu dapat dieksekusi secara independen dan paralel, tanpa gangguan dari shard lain. Hal ini mengurangi persaingan sumber daya dan menghasilkan waktu respons yang lebih cepat. 

  • Peningkatan Ketersediaan dan Ketahanan 

Kegagalan satu shard tidak melumpuhkan seluruh sistem, hanya memengaruhi data pada shard tersebut. Layanan tetap dapat berjalan untuk pengguna di shard lain. Ketahanan semakin kuat jika setiap shard memiliki replika. 

  • Skalabilitas Horizontal yang Hampir Linear 

Penambahan volume data dan lalu lintas dapat diatasi dengan menambah shard baru dan mendistribusikan ulang data. Elastisitas ini sangat ideal untuk lingkungan cloud. 

  • Mengatasi Batasan Penyimpanan Fisik 

Penyimpanan data tidak lagi dibatasi kapasitas satu server. Kapasitas total sistem adalah gabungan dari semua shard, sehingga menghilangkan hambatan pertumbuhan akibat keterbatasan penyimpanan. 

Referensi: 

https://www.mongodb.com/docs/manual/sharding/ 

https://www.geeksforgeeks.org/system-design/database-sharding-a-system-design-concept/