MySQL - Horizontal Partitioning

Halo, para ahli basisdata masa depan! Hari ini, kita akan mendalami dunia yang menarik dari MySQL Horizontal Partitioning. Sebagai guru komputer yang ramah di lingkungan sekitar Anda dengan tahun-tahun pengalaman, saya di sini untuk membimbing Anda dalam perjalanan ini, bahkan jika Anda belum pernah menulis baris kode sebelumnya. Jadi, siapkan topi keras maya Anda, dan mari kita mulai membangun struktur basisdata!

MySQL - Horizontal Partitioning

MySQL Horizontal Partitioning

Imaginilah Anda sedang mengatur sebuah pustaka besar. Daripada menempatkan semua buku di satu rak besar, Anda memutuskan untuk menyebarinya di beberapa rak berdasarkan kriteria tertentu. Itu sebenarnya apa yang dilakukan horizontal partitioning bagi basisdata Anda!

Horizontal partitioning, juga dikenal sebagai sharding, adalah teknik di mana kita membagi tabel besar menjadi beberapa bagian yang lebih kecil dan mudah diatur. Setiap bagian itu disebut partition, dan itu berisi subsekuensi dari baris asli tabel.

Mari kita mulai dengan contoh sederhana:

CREATE TABLE books (
id INT,
title VARCHAR(100),
author VARCHAR(100),
publication_year INT
) PARTITION BY RANGE (publication_year) (
PARTITION p0 VALUES LESS THAN (2000),
PARTITION p1 VALUES LESS THAN (2010),
PARTITION p2 VALUES LESS THAN (2020),
PARTITION p3 VALUES LESS THAN MAXVALUE
);

Dalam contoh ini, kita menciptakan tabel books dan mempartisikan itu berdasarkan publication_year. Kita telah menciptakan empat partition:

  • p0: Buku yang diterbitkan sebelum 2000
  • p1: Buku yang diterbitkan dari 2000 hingga 2009
  • p2: Buku yang diterbitkan dari 2010 hingga 2019
  • p3: Buku yang diterbitkan dari 2020 ke depan

Sekarang, ketika Anda melakukan query pada tabel ini, MySQL dapat cepat menentukan partition mana yang harus dicari, membuat query Anda lebih cepat dan efisien.

MySQL Range Partitioning

Range partitioning mirip seperti mengatur lemari pakaian berdasarkan musim. Anda menempatkan semua pakaian musim panas di salah satu seksi, pakaian musim gugur di seksi lain, dan seterusnya. Di MySQL, kita menggunakan metode ini untuk mempartisi data berdasarkan rentang nilai.

Ini adalah contoh menggunakan gaji karyawan:

CREATE TABLE employees (
id INT,
name VARCHAR(100),
salary INT
) PARTITION BY RANGE (salary) (
PARTITION low_salary VALUES LESS THAN (30000),
PARTITION medium_salary VALUES LESS THAN (60000),
PARTITION high_salary VALUES LESS THAN (100000),
PARTITION very_high_salary VALUES LESS THAN MAXVALUE
);

Dalam kasus ini, kita mempartisi tabel employees berdasarkan rentang gaji. Penataan ini memungkinkan pengambilan data karyawan dalam bracket gaji tertentu secara cepat.

MySQL List Partitioning

List partitioning sangat cocok ketika Anda ingin mempartisi berdasarkan nilai tertentu, bukan rentang. Itu seperti mengurutkan koleksi film Anda berdasarkan genre.

Mari kita partisi tabel produk berdasarkan kategori:

CREATE TABLE products (
id INT,
name VARCHAR(100),
category VARCHAR(50)
) PARTITION BY LIST COLUMNS(category) (
PARTITION p_electronics VALUES IN ('Laptops', 'Smartphones', 'Tablets'),
PARTITION p_clothing VALUES IN ('Shirts', 'Pants', 'Dresses'),
PARTITION p_books VALUES IN ('Fiction', 'Non-fiction', 'Textbooks')
);

Sekarang, ketika Anda melakukan query untuk produk dalam kategori tertentu, MySQL tahu tepat partition mana yang harus dicari!

MySQL Hash Partitioning

Hash partitioning mirip seperti memiliki beg bagi keberuntungan untuk data Anda. MySQL menggunakan fungsi hash untuk menentukan partition mana yang harus ditempati oleh baris. Ini sangat cocok untuk mendistribusikan data secara merata ketika Anda tidak memiliki cara alami untuk mempartisi atau menentukan rentang.

Ini adalah contoh:

CREATE TABLE orders (
id INT,
customer_id INT,
order_date DATE
) PARTITION BY HASH(id)
PARTITIONS 4;

Dalam kasus ini, kita menciptakan empat partition dan membiarkan MySQL menentukan bagaimana pengaturan baris berdasarkan kolom id.

Key Partitioning

Key partitioning mirip dengan hash partitioning, tetapi menggunakan fungsi hash MySQL. Itu sangat berguna ketika Anda ingin mempartisi berdasarkan kunci utama atau kunci unik.

CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
) PARTITION BY KEY()
PARTITIONS 3;

Di sini, kita mempartisi tabel customers berdasarkan kunci utama id ke tiga partition.

MySQL Sub-partitioning

Sub-partitioning, atau komposite partitioning, adalah seperti menciptakan partition dalam partition. Itu adalah kesetaraan basisdata dari boneka Rusia yang bersarang!

Mari kita buat tabel data penjualan, dipartisi berdasarkan tahun dan sub-dipartisi berdasarkan kuartal:

CREATE TABLE sales (
id INT,
sale_date DATE,
amount DECIMAL(10,2)
) PARTITION BY RANGE(YEAR(sale_date))
SUBPARTITION BY HASH(MONTH(sale_date))
SUBPARTITIONS 4 (
PARTITION p0 VALUES LESS THAN (2020),
PARTITION p1 VALUES LESS THAN (2021),
PARTITION p2 VALUES LESS THAN (2022),
PARTITION p3 VALUES LESS THAN MAXVALUE
);

Struktur ini memungkinkan query sangat cepat ketika Anda mencari data penjualan dari tahun dan kuartal tertentu.

Sekarang, mari kita ringkaskan metode partitioning yang kita pelajari dalam tabel praktis:

Metode Partitioning Use Case Contoh
Range Partitioning Data dengan rentang alami Gaji karyawan, tanggal
List Partitioning Data dengan kategori diskrit Kategori produk, wilayah
Hash Partitioning Distribusi data merata ID pelanggan, ID pesanan
Key Partitioning Partitioning berdasarkan kunci utama atau unik Tabel pelanggan berdasarkan ID
Sub-partitioning Organisasi data kompleks Data penjualan berdasarkan tahun dan kuartal

Ingat, para padawan data muda, partitioning adalah alat yang kuat, tetapi dengan kekuatan yang besar datang tanggung jawab besar. Selalu pertimbangkan kasus penggunaan khusus dan distribusi data Anda sebelum memutuskan strategi partitioning.

Sekarang, saat kita menutup pelajaran ini, saya teringat saat saya bekerja di basisdata e-commerce besar. Kami menghadapi waktu query yang lambat, dan solusinya adalah untuk mengimplementasikan partitioning rentang pada tabel produk berdasarkan harga. Itu seperti magis - waktu query kita turun drastis, dan administrator basisdata kami bahkan melakukan tari kebahagiaan di ruang server!

Jadi, jangan takut untuk mencoba teknik partitioning ini. Mereka mungkin menjadi bahan rahasia untuk membuat basisdata Anda menyanyi! Sampaijumpa lagi, terus coding dan semoga query Anda selalu berjalan cepat!

Credits: Image by storyset