Dasar Untuk Memahami Sharding Basis Data

Diterbitkan: 2022-11-05

Membuat situs web adalah langkah pertama saat mengatur kehadiran Anda di Internet. Untuk berkembang dalam jangka panjang, Anda juga harus memastikan situs Anda dapat berkembang untuk mengakomodasi pertumbuhan. Dan salah satu langkah pertama adalah mengimplementasikan database yang dapat diskalakan dengan Anda. Jika tidak, Anda berisiko mengalami kinerja kueri yang lambat dan pemadaman database.

Posting ini akan membahas bagaimana Anda dapat menggunakan sharding basis data untuk mencapai skalabilitas dan ketersediaan tinggi untuk data Anda. Kami juga akan membahas kelemahan sharding dan arsitektur sharding berbeda yang dapat Anda gunakan.

Apa Itu Basis Data Sharding?

Sharding adalah teknik optimasi yang mendistribusikan tabel di server database lain. Ini seperti mempartisi dalam arti bahwa keduanya melibatkan pemecahan data menjadi himpunan bagian yang lebih kecil. Perbedaannya adalah bahwa sharding mendistribusikan subset ini ke server yang berbeda saat mempartisi menyimpannya dalam satu database. Server ini menggunakan mesin database dan jenis perangkat keras yang sama untuk mencapai tingkat kinerja yang sama untuk semua pecahan.

Sharding bertujuan untuk mencapai arsitektur berbagi-tidak ada, menghilangkan kemacetan pemrosesan dan satu titik kegagalan.

Ilustrasi untuk menjelaskan sharding basis data.
Contoh sharding. (Sumber Gambar: Analytics Vidhya)

Anda dapat menerapkan sharding dengan dua cara — secara horizontal dan vertikal. Sharding horizontal membagi tabel berdasarkan baris, sedangkan sharding vertikal membagi tabel berdasarkan kolom.

Dalam hal ini, sharding seperti partisi, yang membagi tabel besar menjadi yang lebih kecil.

Pecahan horizontal efektif untuk database di mana sebagian besar kueri mengembalikan subset baris, seperti database pelanggan yang mengembalikan data (seperti nama, alamat, email, dan sebagainya) sekaligus.

Sharding vertikal efektif untuk database yang kuerinya mengembalikan kolom tunggal. Misalnya, jika database pelanggan mengembalikan nama atau email pelanggan secara terpisah, Anda dapat memisahkan nama dan email ke dalam kelompok yang berbeda.

Manfaat Sharding Basis Data

Di bawah ini adalah beberapa keuntungan dari sharding basis data.

Peningkatan Penskalaan Horizontal

Anda dapat menskalakan database Anda secara vertikal atau horizontal. Penskalaan vertikal mengacu pada penambahan lebih banyak unit pemrosesan pusat (CPU) dan memori akses acak (RAM) ke server untuk meningkatkan kinerja. Penskalaan vertikal adalah solusi yang berguna untuk database kecil hingga menengah. Namun, seiring bertambahnya data Anda, penskalaan vertikal menjadi tidak layak. Hanya ada begitu banyak kekuatan yang dapat Anda tambahkan ke satu server.

Penskalaan horizontal lebih fleksibel. Ini memungkinkan Anda untuk menskalakan basis data Anda sesuai kebutuhan dengan menambahkan lebih banyak server ke sistem Anda. Masing-masing server ini menyediakan sumber daya ke pecahan basis data yang berbeda. Ini mendistribusikan beban kerja dan meningkatkan kemampuan sistem untuk menangani lebih banyak permintaan.

Waktu Respon Kueri Lebih Cepat

Pecahan hanya memiliki beberapa baris dan kolom. Karena itu, dibutuhkan lebih sedikit waktu untuk memproses kueri basis data. Sebaliknya, kueri database non-sharding mungkin memerlukan pencarian melalui ratusan — atau bahkan ribuan — baris.

Peningkatan Keandalan dalam Situasi Pemadaman

Pemadaman basis data terjadi karena berbagai alasan, termasuk penghapusan data yang tidak disengaja, kesalahan koneksi, dan serangan keamanan siber. Sharding meminimalkan efek pemadaman. Karena setiap shard bersifat otonom, hanya shard yang terpengaruh yang menghadapi waktu henti. Misalnya, jika Anda memiliki empat pecahan dan mengalami pemadaman di salah satunya, hanya 25 persen operasi yang akan terpengaruh.

Kekurangan Sharding

Meskipun sharding meningkatkan keandalan dan ketersediaan database, penerapannya rumit. Menggunakan arsitektur sharding yang salah dapat memperlambat kinerja dan menyebabkan hilangnya data.

Pastikan untuk memilih teknik sharding yang memungkinkan distribusi data seimbang di semua shard. Tanpa keseimbangan ini, Anda berisiko membuat hotspot basis data, yang terjadi ketika satu pecahan menyimpan sebagian besar data sementara pecahan lainnya praktis kosong. Ini mengurangi throughput tulis ke pecahan tunggal.

Untuk mengatasi ini, Anda dapat mempartisi pecahan yang tidak seimbang lebih jauh, tetapi proses itu menantang dan dapat menghapus database Anda saat Anda memigrasikan data.

Kelemahan lain dari sharding adalah bahwa gabungan SQL yang melibatkan banyak tabel di shard yang berbeda dapat menjadi terlalu lambat dan menurunkan kinerja. Namun, dengan arsitektur yang tepat, Anda dapat menghindari masalah ini.

Arsitektur Sharding

Anda dapat mengimplementasikan sharding menggunakan tiga arsitektur:

  • Sharding berbasis kunci
  • Sharding berbasis rentang
  • Sharding berbasis direktori

Arsitektur yang Anda pilih tergantung pada kasus penggunaan Anda.

Sharding Berbasis Kunci

Dalam arsitektur sharding berbasis kunci atau hash, aplikasi database menggunakan kunci shard untuk menemukan shard. Fungsi hashing meng-hash nilai kunci sharding, dan output memetakan data ke shard tertentu. Fungsi hashing sederhana dapat berupa modulus kunci dan jumlah pecahan.

Fungsi hash dapat mengambil lebih dari satu kunci sharding. Karena itu, sharding berbasis kunci cocok untuk rekaman data yang mungkin memiliki kunci bersama. Distribusi data secara algoritmik meminimalkan kemungkinan pembuatan hotspot basis data di mana satu pecahan berisi lebih banyak data daripada yang lain.

Namun, karena distribusi hanya bergantung pada fungsi hashing, tidak mungkin untuk mengelompokkan data secara logis. Oleh karena itu, operasi database yang memerlukan data dari beberapa pecahan mungkin tidak efisien karena memerlukan pembacaan data dari setiap pecahan.

Sharding Berbasis Rentang

Sharding berbasis rentang melibatkan sharding database tergantung pada rentang nilai yang ditentukan.

Ini menggunakan kunci sharding untuk menentukan shard mana yang akan diberi nilai. Aplikasi database memeriksa pecahan yang sesuai dengan kunci pecahan dalam tabel pencarian dan menyimpan data. Karena itu, sharding berbasis rentang mudah dirancang dan diimplementasikan.

Misalnya, Anda bisa menggunakan nilai ID pengguna di database pengguna sebagai kunci sharding. Anda dapat menyimpan pengguna dengan ID dari 0-2.000 di satu shard, yang antara 2.000 dan 4.000 di shard lain, dan seterusnya.

Sharding berbasis rentang dapat menyebabkan hotspot basis data. Pertimbangkan database pengguna di mana sebagian besar ID pengguna Anda berada di antara 2.001 dan 4.000. Proses menetapkan mereka ke pecahan tunggal, menciptakan ketidakseimbangan dari waktu ke waktu. Oleh karena itu, sharding berbasis rentang berfungsi paling baik untuk data yang didistribusikan secara merata.

Sharding Berbasis Direktori

sharding berbasis direktori mengelompokkan data yang terkait secara logis dalam shard yang sama. Ini menggunakan tabel pencarian yang berisi daftar pemetaan untuk setiap entitas dalam database. Setiap pemetaan sesuai dengan pecahan database.

Sharding berbasis direktori lebih fleksibel daripada sharding berbasis rentang atau kunci karena Anda dapat menambahkan data ke shard secara dinamis. Tidak ada fungsi sharding untuk diikuti atau rentang nilai untuk tetap berada di dalamnya. Fleksibilitas ini meningkatkan efisiensi database: Anda dapat menyimpan data terkait dalam satu pecahan, yang berarti mengeksekusi kueri umum membutuhkan waktu lebih sedikit.

Misalnya, jika Anda menggunakan sharding berbasis direktori dan mengelompokkan pengguna menurut lokasi mereka, mengambil pengguna dari tempat tertentu, Anda hanya meminta satu shard.

Sharding Basis Data dengan Kinsta

Sebagian besar mesin database modern menyediakan dukungan sharding database. Salah satu mesin database ini adalah MariaDB, garpu MySQL yang didukung secara komersial. Ini adalah sistem basis data sumber terbuka berkinerja tinggi yang diadopsi oleh perusahaan seperti IBM, GitHub, dan Wikimedia. Ini juga merupakan bagian dari tumpukan server berkinerja tinggi di Kinsta.

MariaDB menawarkan fitur sharding bawaan melalui mesin penyimpanan laba-laba. Mesin penyimpanan laba-laba adalah mesin pembentukan cluster yang mendukung transaksi partisi dan arsitektur diperpanjang (XA). Ini memungkinkan Anda untuk memperlakukan tabel jarak jauh dari instance yang berbeda seolah-olah mereka berada dalam instance yang sama. Setelah Anda membuat tabel di mesin penyimpanan spider, tabel tersebut menautkan ke tabel lain di server MariaDB jarak jauh. Setelah membuat koneksi, mesin penyimpanan membagikan tautan dengan semua tabel yang merupakan bagian dari transaksi yang sama.

Ringkasan

Sharding basis data adalah teknik penskalaan yang mempartisi tabel menjadi himpunan bagian yang lebih kecil dan mendistribusikannya ke server berbeda yang disebut pecahan. Anda dapat menerapkan sharding melalui berbagai cara, seperti sharding berbasis kunci, sharding berbasis rentang, dan sharding berbasis direktori.

Meskipun sharding meningkatkan skalabilitas, keandalan, dan ketersediaan database, penerapannya sangat rumit. Selain itu, setelah Anda membuat shard, tidak mudah untuk mengembalikan database ke status unsharded. Karena itu, gunakan sharding untuk pengoptimalan hanya jika Anda yakin opsi skalabilitas lainnya tidak akan berfungsi.

Apakah bisnis Anda adalah organisasi nirlaba atau tingkat perusahaan, solusi ahli Kinsta dapat menghilangkan kekhawatiran hosting situs Anda, memungkinkan Anda untuk fokus pada hal yang paling penting.