HOTLINE

(0275) 2974 127

CHAT WA 24/7
0859-60000-390 (Sales)
0852-8969-9009 (Support)
Blog

Mengenal Database Sharding: Pengertian, Jenis, dan Contohnya [Lengkap]

Database merupakan salah satu komponen penting dalam aplikasi modern. Seiring bertambahnya jumlah pengguna, transaksi, dan volume data, satu server database pada akhirnya dapat mencapai batas kapasitas CPU, memory, storage, maupun kemampuan menangani query secara bersamaan. Salah satu pendekatan yang dapat digunakan untuk mengatasi masalah tersebut adalah database sharding.

Database sharding merupakan teknik membagi data secara horizontal ke beberapa database atau server yang disebut shard. Dengan membagi data dan workload ke beberapa server, sistem dapat melakukan horizontal scaling tanpa harus terus bergantung pada peningkatan kapasitas satu server.

Namun, sharding bukan sekadar memindahkan data ke beberapa server. Pemilihan shard key, mekanisme routing query, distribusi data, rebalancing, dan pengelolaan transaksi harus dirancang dengan baik agar sharding benar-benar memberikan manfaat.

Apa Itu Database Sharding?

Database sharding adalah teknik membagi data secara horizontal ke beberapa database atau server yang berbeda sehingga setiap server hanya menyimpan sebagian data dari keseluruhan dataset. Setiap bagian data tersebut disebut shard. Jika sebuah database memiliki 100 juta data, misalnya, data tersebut dapat dibagi ke beberapa shard berdasarkan aturan tertentu. Contoh sederhana:

Database
│
├── Shard 1 → Data pengguna 1 - 1.000.000
├── Shard 2 → Data pengguna 1.000.001 - 2.000.000
├── Shard 3 → Data pengguna 2.000.001 - 3.000.000
└── Shard 4 → Data pengguna 3.000.001 - 4.000.000

Meskipun data secara fisik tersebar pada beberapa server, seluruh shard dapat dipandang sebagai satu sistem database secara logis. Konsep ini merupakan bentuk horizontal partitioning, yaitu membagi baris data ke beberapa lokasi, sementara struktur atau kolom data pada setiap bagian tetap mengikuti skema yang sama. Oracle, misalnya, mendefinisikan sharding sebagai horizontal partitioning data ke beberapa database independen.

Mengapa Database Sharding Dibutuhkan?

Salah satu alasan utama menggunakan database sharding adalah keterbatasan vertical scaling. Vertical scaling berarti meningkatkan kemampuan satu server dengan menambah:

  • CPU.
  • RAM.
  • Storage.
  • Kapasitas I/O.

Pendekatan tersebut dapat efektif sampai batas tertentu. Namun, satu server tetap memiliki batas kapasitas fisik dan konfigurasi hardware. Ketika kebutuhan aplikasi terus meningkat, menambah kapasitas server bisa menjadi semakin mahal dan pada akhirnya tidak lagi mencukupi. Sharding menggunakan pendekatan berbeda, yaitu horizontal scaling. Daripada menggunakan satu server yang semakin besar:

Server Besar
CPU: 64 Core
RAM: 512 GB
Storage: 10 TB

sistem dapat menggunakan beberapa server:

Shard 1
Shard 2
Shard 3
Shard 4

Masing-masing server menangani sebagian data dan workload.

Bagaimana Cara Kerja Database Sharding?

Secara umum, database sharding bekerja dengan menentukan bagaimana data akan dibagi dan ke mana query harus diarahkan. Prosesnya dapat digambarkan sebagai berikut:

Application
     │
     ↓
Query Router
     │
 ┌───┼────┬────┐
 ↓   ↓    ↓    ↓
S1  S2   S3   S4

1. Menentukan Shard Key

Langkah penting dalam database sharding adalah menentukan shard key. Shard key merupakan field atau kombinasi field yang digunakan untuk menentukan bagaimana data didistribusikan ke shard. Misalnya tabel pengguna memiliki:

user_id
name
email
country

Sistem dapat menggunakan user_id sebagai shard key. Data kemudian didistribusikan berdasarkan nilai user_id.

2. Membagi Data ke Beberapa Shard

Setelah shard key ditentukan, sistem membagi data berdasarkan strategi tertentu.

Misalnya menggunakan range:

Shard 1 → user_id 1 - 1.000.000
Shard 2 → user_id 1.000.001 - 2.000.000
Shard 3 → user_id 2.000.001 - 3.000.000

Dengan demikian, setiap shard hanya menyimpan subset data.

3. Query Router Menentukan Lokasi Data

Ketika aplikasi mengirim query, sistem perlu mengetahui shard mana yang menyimpan data tersebut. Pada MongoDB, misalnya, komponen mongos bertindak sebagai query router antara aplikasi dan sharded cluster. Metadata mengenai distribusi data disimpan oleh config server.

4. Query Diteruskan ke Shard

Jika query memiliki shard key yang sesuai, router dapat mengarahkan query langsung ke shard yang relevan. Misalnya:

SELECT * FROM users
WHERE user_id = 1500000;

Jika user_id digunakan sebagai shard key dan ID tersebut berada di Shard 2, query dapat diarahkan langsung ke Shard 2. Pendekatan seperti ini disebut targeted query dan umumnya lebih efisien daripada meminta seluruh shard menjalankan query.

5. Hasil Dikembalikan ke Aplikasi

Setelah shard menyelesaikan query, hasilnya dikembalikan melalui router kepada aplikasi. Untuk query tertentu, sistem mungkin harus mengakses lebih dari satu shard dan menggabungkan hasilnya terlebih dahulu.

Apa Itu Shard Key?

Shard key adalah atribut atau kumpulan atribut yang digunakan untuk menentukan distribusi data ke berbagai shard. Shard key merupakan salah satu keputusan paling penting dalam desain database sharding. Contohnya, pada tabel:

user_id nama negara
1001 Andi Indonesia
1002 Budi Indonesia
1003 Citra Malaysia
1004 Deni Singapura

Jika user_id digunakan sebagai shard key, sistem dapat menggunakan nilai tersebut untuk menentukan lokasi data. Pemilihan shard key harus mempertimbangkan pola query dan distribusi workload. Microsoft juga menekankan bahwa shard key perlu dipilih agar workload dapat tersebar dengan baik di antara shard. Shard key yang buruk dapat menyebabkan sebagian besar data atau request terkonsentrasi pada satu shard sehingga menciptakan hotspot.

Jenis-Jenis Database Sharding

Ada beberapa pendekatan yang umum digunakan untuk menentukan distribusi data.

1. Range-Based Sharding

Range-based sharding membagi data berdasarkan rentang nilai shard key. Contohnya:

Shard 1 → ID 1 - 1.000
Shard 2 → ID 1.001 - 2.000
Shard 3 → ID 2.001 - 3.000
  • Kelebihan
    Konsepnya mudah dipahami.
    Query berdasarkan range dapat lebih mudah diarahkan.
    Cocok untuk pola data tertentu yang memiliki rentang alami.
  • Kekurangan
    Berpotensi menyebabkan hotspot.
    Distribusi data dapat menjadi tidak seimbang.
    Penambahan data baru dapat terkonsentrasi pada shard tertentu.

MongoDB mendukung ranged sharding, di mana nilai shard key dibagi menjadi range tertentu dan chunk ditempatkan pada shard yang sesuai.

2. Hash-Based Sharding

Hash-based sharding menggunakan fungsi hash terhadap shard key untuk menentukan distribusi data. Contoh sederhana:

user_id
   ↓
Hash Function
   ↓
Shard Assignment

Nilai yang berbeda akan dipetakan ke distribusi hash sehingga data cenderung tersebar lebih merata. MongoDB, misalnya, menyediakan hashed sharding yang menghitung hash dari shard key sebelum menentukan distribusi chunk.

  • Kelebihan
    Distribusi data cenderung lebih merata.
    Dapat mengurangi risiko hotspot akibat nilai shard key yang meningkat secara monoton.
  • Kekurangan
    Query berdasarkan range lebih sulit diarahkan ke satu shard.
    Query tertentu dapat membutuhkan akses ke beberapa shard.

3. Directory-Based Sharding

Directory-based sharding menggunakan tabel atau layanan metadata untuk menentukan lokasi suatu data. Contohnya:

user_id 1001 → Shard A
user_id 1002 → Shard C
user_id 1003 → Shard B

Sistem terlebih dahulu mencari informasi lokasi data, kemudian meneruskan query ke shard yang sesuai. Pendekatan ini memberikan fleksibilitas tinggi, tetapi membutuhkan komponen metadata dan mekanisme routing yang harus dikelola dengan baik.

Perbandingan Jenis Sharding

Jenis Cara Distribusi Kelebihan Kekurangan
Range-based Berdasarkan rentang nilai Mudah dan cocok untuk range query Risiko hotspot
Hash-based Berdasarkan hasil hash Distribusi cenderung merata Range query lebih kompleks
Directory-based Berdasarkan metadata lokasi Sangat fleksibel Membutuhkan metadata dan routing

Perbandingan Database Sharding dan Partitioning

Database sharding sering dianggap sama dengan partitioning karena keduanya membagi data. Namun, keduanya tidak selalu identik. Partitioning dapat membagi satu tabel atau dataset menjadi beberapa bagian secara logis atau fisik. Sementara sharding umumnya merujuk pada horizontal partitioning yang didistribusikan ke beberapa database atau server independen.

Aspek Partitioning Sharding
Pembagian data Menjadi beberapa partition Menjadi beberapa shard
Lokasi Bisa dalam satu database/server Umumnya beberapa database/server
Tujuan Organisasi dan performa data Horizontal scaling
Infrastruktur Dapat menggunakan satu server Biasanya multi-server
Kompleksitas Relatif lebih sederhana Lebih kompleks
Contoh Partition tabel berdasarkan tanggal Data pelanggan dibagi ke beberapa database

PostgreSQL, misalnya, mendukung table partitioning dengan membagi satu tabel besar menjadi bagian-bagian fisik yang lebih kecil.

Database Sharding dan Database Replication

Sharding juga berbeda dengan replication. Pada replication, data yang sama disalin ke beberapa server. Sementara pada sharding, data dibagi sehingga setiap server hanya menyimpan sebagian dataset.

Aspek Sharding Replication
Data Dibagi ke beberapa server Disalin ke beberapa server
Tujuan utama Horizontal scaling Availability dan redundancy
Setiap server memiliki seluruh data? Tidak Umumnya ya
Storage capacity Bertambah dengan shard Tidak otomatis menambah kapasitas dataset
Read scaling Dapat membantu Sangat umum
Write scaling Dapat membantu Bergantung arsitektur
Kompleksitas Relatif tinggi Bergantung implementasi

Keduanya juga dapat digunakan bersamaan. Misalnya, sebuah sistem dapat memiliki beberapa shard dan setiap shard memiliki replica untuk meningkatkan availability. MongoDB menggunakan pendekatan tersebut pada sharded cluster, di mana setiap shard harus dijalankan sebagai replica set.

Apa Manfaat Database Sharding?

1. Meningkatkan Skalabilitas

Manfaat utama database sharding adalah memungkinkan horizontal scaling. Ketika kebutuhan sistem meningkat, kapasitas dapat ditambah dengan menambahkan shard baru.

2. Menangani Data Berukuran Besar

Jika seluruh dataset sudah terlalu besar untuk ditangani secara efektif oleh satu server, sharding memungkinkan data tersebut dibagi ke beberapa server. Setiap shard hanya perlu menyimpan sebagian data sehingga kapasitas storage dapat ditingkatkan secara horizontal.

3. Mendistribusikan Workload

Sharding dapat membagi workload read dan write ke beberapa server. Dengan distribusi yang baik, satu server tidak perlu menangani seluruh operasi database.

4. Mengurangi Beban pada Satu Server

Karena data dan workload tersebar, penggunaan CPU, RAM, storage, dan I/O dapat didistribusikan ke beberapa server.

5. Mendukung Pertumbuhan Aplikasi

Sharding dapat menjadi bagian dari strategi scaling untuk aplikasi yang mengalami pertumbuhan pengguna dan data secara signifikan.

Kekurangan Database Sharding

Meskipun menawarkan scalability, database sharding juga memiliki konsekuensi.

1. Kompleksitas Infrastruktur

Sistem tidak lagi hanya mengelola satu database server. Administrator perlu mengelola beberapa shard, routing, metadata, monitoring, backup, dan proses recovery. Microsoft menekankan bahwa sharding dapat meningkatkan scalability, tetapi juga membawa konsekuensi dalam pengelolaan dan distribusi data.

2. Pemilihan Shard Key Sulit

Shard key yang tidak tepat dapat menghasilkan distribusi data yang tidak seimbang. Misalnya:

Shard 1 → 80% workload
Shard 2 → 10% workload
Shard 3 → 10% workload

Dalam kondisi tersebut, Shard 1 menjadi bottleneck meskipun jumlah server sudah bertambah.

3. Query Lintas Shard

Query yang tidak dapat ditargetkan ke shard tertentu mungkin harus dikirim ke beberapa shard. MongoDB menyebut pola ini sebagai scatter/gather, dan query semacam ini dapat menjadi lebih lambat karena melibatkan banyak shard.

4. Transaksi Menjadi Lebih Kompleks

Transaksi yang melibatkan data pada beberapa shard dapat membutuhkan mekanisme tambahan dan memiliki overhead lebih tinggi dibandingkan transaksi pada satu database.

5. Maintenance Lebih Rumit

Administrator perlu memperhatikan:

  • Distribusi data.
  • Kapasitas setiap shard.
  • Query performance.
  • Rebalancing.
  • Backup dan recovery.
  • Monitoring.
  • Network latency.
  • Penambahan atau pengurangan shard.

Apa Itu Hotspot pada Database Sharding?

Hotspot terjadi ketika workload tidak tersebar secara merata dan sebagian besar request terkonsentrasi pada shard tertentu. Contohnya:

Shard 1 → 10% workload
Shard 2 → 10% workload
Shard 3 → 80% workload

Shard 3 menjadi bottleneck meskipun kapasitas keseluruhan cluster masih tersedia.

Hotspot dapat terjadi karena pemilihan shard key yang buruk atau pola akses aplikasi yang tidak merata. Karena itu, shard key sebaiknya dipilih berdasarkan distribusi data dan pola query, bukan hanya berdasarkan field yang mudah digunakan.

Apa Itu Rebalancing dalam Database Sharding?

Ketika data tidak lagi tersebar secara merata, sistem dapat melakukan rebalancing atau pemindahan sebagian data antar-shard. Contohnya:

Sebelum:
Shard 1 → 20%
Shard 2 → 60%
Shard 3 → 20%

Setelah Rebalancing:
Shard 1 → 33%
Shard 2 → 34%
Shard 3 → 33%

Tujuannya adalah menjaga distribusi data dan workload agar lebih seimbang. MongoDB, misalnya, memiliki balancer yang dapat memindahkan range/chunk untuk membantu menjaga distribusi data di antara shard.

Apakah Database Sharding Membuat Database Lebih Cepat?

Tidak selalu. Database sharding dapat membantu meningkatkan performa ketika data dan workload berhasil didistribusikan secara merata ke beberapa shard. Query yang menggunakan shard key dan dapat diarahkan langsung ke shard tertentu juga berpotensi berjalan lebih efisien karena tidak perlu mengakses seluruh database cluster.

Sebaliknya, query yang harus mengakses beberapa shard dapat menimbulkan overhead tambahan karena sistem perlu mengirimkan query ke beberapa server dan menggabungkan hasilnya. Kondisi ini dapat meningkatkan latency dan membuat performa tidak selalu lebih baik dibandingkan database tanpa sharding.

Oleh karena itu, database sharding tidak sebaiknya diterapkan hanya untuk mempercepat database. Efektivitasnya sangat bergantung pada pemilihan shard key, pola query, distribusi workload, network latency, serta kapasitas masing-masing shard. Dengan desain yang tepat, sharding dapat membantu meningkatkan scalability sekaligus mendukung performa database pada aplikasi berskala besar.

Kapan Database Sharding Sebaiknya Digunakan?

Database sharding sebaiknya dipertimbangkan ketika aplikasi sudah memiliki skala besar dan satu database server mulai mengalami keterbatasan kapasitas. Sharding memungkinkan data dan workload dibagi ke beberapa server sehingga aplikasi dapat melakukan horizontal scaling.

Beberapa kondisi yang dapat menjadi pertimbangan untuk menggunakan database sharding antara lain volume data yang sangat besar, traffic database yang terus meningkat, beban read dan write yang tinggi, kebutuhan storage yang melebihi kapasitas satu server, serta vertical scaling yang mulai mencapai batas. Sharding juga lebih efektif ketika workload dapat dibagi berdasarkan karakteristik data atau pola akses tertentu.

Sebaliknya, aplikasi dengan traffic rendah dan database yang masih dapat ditangani oleh satu server biasanya belum membutuhkan sharding. Menerapkan database sharding terlalu dini dapat menambah kompleksitas dalam pengelolaan, monitoring, dan maintenance tanpa memberikan manfaat yang sebanding. Oleh karena itu, sharding sebaiknya diterapkan berdasarkan kebutuhan dan skala aplikasi, bukan hanya sebagai langkah untuk meningkatkan performa.

Contoh Database Sharding pada E-Commerce

Bayangkan sebuah e-commerce memiliki puluhan juta pelanggan. Jika seluruh data pelanggan disimpan pada satu database:

                 Database
                     │
             50 juta pelanggan
                     │
              Satu Server

Seiring pertumbuhan data, server dapat mengalami keterbatasan. Dengan sharding berdasarkan user_id:

                 Application
                      │
                 Query Router
                      │
       ┌──────────────┼──────────────┐
       ↓              ↓              ↓
    Shard 1        Shard 2        Shard 3
    User A-H       User I-P       User Q-Z

Setiap shard hanya menangani sebagian data. Jika pengguna dengan ID tertentu masuk, router menentukan shard yang menyimpan data tersebut dan mengarahkan query ke server yang sesuai.

Apakah Database Sharding Selalu Membutuhkan Query Router?

Tidak selalu dalam bentuk komponen khusus yang berdiri sendiri, tetapi sistem yang menggunakan sharding membutuhkan mekanisme untuk menentukan lokasi data dan mengarahkan query ke shard yang tepat. Pada MongoDB, fungsi tersebut dilakukan oleh mongos. Dalam arsitektur lain, routing dapat ditangani oleh middleware, application layer, database proxy, atau mekanisme bawaan platform. Karena itu, arsitektur aplikasi perlu mengetahui atau dapat menentukan shard mana yang harus menangani suatu operasi.

Hal yang Perlu Diperhatikan Sebelum Menggunakan Database Sharding

Sebelum menerapkan sharding, beberapa aspek penting perlu dianalisis.

1. Tentukan Pola Query

Pahami query yang paling sering digunakan aplikasi. Shard key sebaiknya mendukung pola query utama sehingga query dapat diarahkan ke shard yang relevan.

2. Pilih Shard Key dengan Hati-Hati

Shard key harus membantu mendistribusikan data dan workload secara merata. Kesalahan dalam memilih shard key dapat menyebabkan hotspot dan masalah scalability.

3. Perhatikan Distribusi Data

Jangan hanya melihat jumlah data. Distribusi request juga penting. Shard dengan data sedikit tetapi menerima sebagian besar request tetap dapat menjadi bottleneck.

4. Siapkan Monitoring

Pantau:

  • CPU.
  • RAM.
  • Storage.
  • I/O.
  • Network.
  • Query latency.
  • Distribusi data.
  • Workload setiap shard.

5. Siapkan Strategi Rebalancing

Pertumbuhan data dapat membuat distribusi awal menjadi tidak seimbang. Sistem perlu memiliki strategi untuk melakukan rebalancing.

6. Pertimbangkan Backup dan Recovery

Setiap shard merupakan bagian dari dataset. Strategi backup dan recovery harus mempertimbangkan seluruh shard agar data dapat dipulihkan secara konsisten.

Database Sharding pada Arsitektur Modern

Database sharding sering menjadi bagian dari arsitektur distributed database dan sistem berskala besar. Dalam implementasi tertentu, sharding dapat dikombinasikan dengan replication. Contohnya:

                 Application
                      │
                 Query Router
                      │
        ┌─────────────┼─────────────┐
        ↓             ↓             ↓
     Shard 1       Shard 2       Shard 3
       │             │             │
    Replica       Replica       Replica

Dalam arsitektur seperti ini, sharding digunakan untuk membagi data, sedangkan replication digunakan untuk menyediakan salinan data dan meningkatkan availability. Kombinasi keduanya dapat membantu sistem menangani dataset besar sekaligus menyediakan redundancy, tetapi juga meningkatkan kompleksitas operasional.

Kesimpulan

Database sharding adalah teknik membagi data secara horizontal ke beberapa database atau server yang disebut shard. Tujuan utamanya adalah mendukung horizontal scaling sehingga kapasitas storage dan workload database tidak hanya bergantung pada satu server.

Dalam penerapannya, shard key menjadi salah satu komponen penting karena menentukan bagaimana data didistribusikan. Strategi seperti range-based sharding dan hash-based sharding memiliki karakteristik berbeda sehingga pemilihannya perlu disesuaikan dengan pola data dan query aplikasi.

Database sharding dapat membantu meningkatkan scalability, mendistribusikan workload, dan menangani dataset berukuran besar. Namun, penerapannya juga menambah kompleksitas dalam routing query, pemilihan shard key, rebalancing, monitoring, transaksi lintas shard, serta backup dan recovery.

Karena itu, database sharding tidak selalu diperlukan untuk setiap aplikasi. Teknik ini lebih tepat digunakan ketika satu database server mulai menghadapi keterbatasan kapasitas dan horizontal scaling memang dibutuhkan. Dengan perencanaan yang tepat, sharding dapat menjadi bagian penting dari arsitektur database untuk aplikasi berskala besar.

Bagi Anda yang ingin mempelajari lebih banyak mengenai database, server, hosting, jaringan, dan teknologi web, berbagai panduan teknis lainnya juga dapat ditemukan di blog Hosteko. Informasi tersebut dapat membantu menambah wawasan mengenai pengelolaan website, server, hosting, serta infrastruktur digital.

5/5 - (1 vote)
Fitri Ana

Recent Posts

Cara Memilih dan Menerapkan ERP yang Tepat untuk Bisnis

Memilih software ERP bukan sekadar membandingkan jumlah fitur atau mencari vendor yang paling populer. ERP…

1 hour ago

Database Replication: Pengertian, Cara Kerja, Jenis, dan Manfaat

Database replication adalah teknik untuk membuat dan mempertahankan salinan data dari satu database ke database…

5 hours ago

Jenis, Modul, dan Contoh ERP untuk Bisnis | Panduan Lengkap

Setelah memahami fungsi dan manfaat ERP, langkah berikutnya adalah mengenali model penerapan ERP, modul yang…

23 hours ago

Fungsi dan Manfaat ERP untuk Bisnis: Panduan Lengkap

Setelah memahami pengertian dan cara kerja ERP, pembahasan berikutnya adalah fungsi serta manfaatnya bagi perusahaan.…

1 day ago

Mengenal Ansible: Solusi Cerdas untuk Otomatisasi Server dan Infrastruktur IT

Mengelola banyak server dan perangkat dalam sebuah infrastruktur IT dapat menjadi pekerjaan yang kompleks jika…

1 day ago

Apa Itu Growth Hacking? Strategi Cerdas untuk Mempercepat Pertumbuhan Bisnis

Di tengah persaingan bisnis digital yang semakin ketat, perusahaan tidak cukup hanya mengandalkan strategi pemasaran…

1 day ago