Last chance! 50% off DataCamp Premium
Sale ends in
Apakah Anda membangun aplikasi berfokus pada pelanggan atau menjalankan pipeline analitik yang kompleks, satu hal menjadi jelas: cara Anda menyimpan dan mengakses data dapat menentukan kinerja—baik atau buruk.
Saya telah melihat langsung betapa lebih mulusnya sistem berjalan saat data disusun dengan matang, dan di situlah pemartisian data berperan. Ini adalah salah satu teknik yang dapat secara drastis meningkatkan kecepatan kueri, efisiensi penyimpanan, dan skalabilitas.
Dalam tulisan ini, saya akan menjelaskan pemartisian data, berbagai jenis yang tersedia, dan praktik terbaik yang saya pelajari sepanjang jalan.
Pemartisian data adalah teknik untuk membagi kumpulan data besar menjadi bagian-bagian yang lebih kecil dan mudah dikelola yang disebut partisi. Setiap partisi berisi subset data dan didistribusikan ke beberapa node atau server. Partisi-partisi ini dapat disimpan, dikueri, dan dikelola sebagai tabel terpisah, meskipun secara logis tetap milik kumpulan data yang sama.
Pemartisian data meningkatkan kinerja dan skalabilitas basis data. Misalnya, mencari satu titik data di seluruh tabel memakan waktu lebih lama dan menggunakan lebih banyak sumber daya dibandingkan mencari di partisi tertentu. Itulah sebabnya data disimpan sebagai partisi.
Pemartisian data mencakup berbagai jenis, masing-masing dengan strategi dan manfaat unik. Di bagian ini, saya membahas jenis yang paling umum.
Alih-alih menyimpan semua data dalam satu tabel, pemartisian horizontal membagi data berdasarkan baris, artinya kumpulan baris yang berbeda disimpan sebagai partisi.
Semua partisi pada pemartisian horizontal berisi set kolom yang sama tetapi kelompok baris yang berbeda.
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
-30° F |
Alaska |
AS |
Musim dingin |
|
48.2° F |
Queensland |
Australia |
Musim panas |
|
100° F |
Andhra Pradesh |
India |
Musim panas |
|
35° F |
California |
AS |
Musim dingin |
|
96° F |
Texas |
AS |
Musim panas |
|
62° F |
Tasmania |
Australia |
Musim dingin |
Pemartisian horizontal berdasarkan negara:
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
-30° F |
Alaska |
AS |
Musim dingin |
|
35° F |
California |
AS |
Musim dingin |
|
35° F |
California |
AS |
Musim dingin |
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
48.2° F |
Queensland |
Australia |
Musim panas |
|
62° F |
Tasmania |
Australia |
Musim dingin |
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
100° F |
Andhra Pradesh |
India |
Musim panas |
Pemartisian vertikal membagi data berdasarkan kolom, sehingga setiap partisi berisi jumlah baris yang sama namun lebih sedikit kolom.
Kunci partisi atau kolom utama akan ada di setiap partisi untuk menjaga hubungan logis.
Pemartisian vertikal populer ketika informasi sensitif perlu disimpan terpisah dari data reguler. Ini memungkinkan kolom sensitif disimpan dalam satu partisi dan data standar di partisi lain.
Kasus penggunaan umum lainnya adalah mengelompokkan kolom yang sering diperbarui ke dalam satu partisi dan sisanya di partisi terpisah.
|
Emp_id |
Emp_name |
Jabatan |
Emp_email |
Emp_phone |
Emp_salary |
|
z0yu9h |
Alex |
Data scientist |
alex@yoho.com |
+101 890 456 |
250K |
|
f8o5pj |
Adam |
Data engineer |
adam@prodgy.com |
+630 789 365 |
230K |
|
z006yu |
Matt |
Data analyst |
matt@oltk.com |
+857 342 937 |
166K |
|
a6u895 |
Elina |
Ops engineer |
elina@wal.com |
+892 494 782 |
190K |
|
g68w90 |
Joseph |
Software engineer |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id adalah pengenal unik pada tabel di atas, jadi semua partisi memilikinya.
Partisi 1:
|
Emp_id |
Emp_name |
Jabatan |
Emp_email |
|
z0yu9h |
Alex |
Data scientist |
alex@yoho.com |
|
f8o5pj |
Adam |
Data engineer |
adam@prodgy.com |
|
z006yu |
Matt |
Data analyst |
matt@oltk.com |
|
a6u895 |
Elina |
Ops engineer |
elina@wal.com |
|
g68w90 |
Joseph |
Software engineer |
joseph@yoho.com |
Partisi 2:
|
Emp_id |
Emp_phone |
Emp_salary |
|
z0yu9h |
+101 890 456 |
250K |
|
f8o5pj |
+630 789 365 |
230K |
|
z006yu |
+857 342 937 |
166K |
|
a6u895 |
+892 494 782 |
190K |
|
g68w90 |
+852 603 389 |
210K |
Pemartisian rentang membagi data berdasarkan rentang nilai untuk kolom tertentu.
Biasanya, setiap partisi memiliki batas bawah dan atas untuk kolom kunci, dan sebuah rekaman yang berada dalam rentang ini akan ditetapkan ke partisi tersebut.
|
Product_id |
Tanggal |
Laba |
|
z0yu9h |
2021-03-17 |
$100K |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
|
a6u895 |
2021-07-23 |
$237K |
|
g68w90 |
2022-02-26 |
$2345K |
Partisi 1:
|
product_id |
Tanggal |
Laba |
|
z0yu9h |
2021-03-17 |
$100K |
|
a6u895 |
2021-07-23 |
$237K |
Partisi 2:
|
product_id |
Tanggal |
Laba |
|
f8o5pj |
2022-04-04 |
$234K |
|
z006yu |
2022-09-13 |
$789K |
Sebuah fungsi hash diterapkan pada kunci partisi, dan keluarannya menentukan rekaman mana yang harus disimpan di partisi mana. Pada teknik ini, jumlah partisi ditentukan sebelumnya.
Sisa hasil pembagian nilai hash dengan jumlah partisi menentukan partisi mana tempat rekaman tersebut harus disimpan. Mari kita lihat contohnya:
z0yu9h, hash(‘z0yu9h’) = 101 dan jumlah partisi = 4, maka 101%4 = 1. Jadi, rekaman ini disimpan di partisi pertama. Dengan cara ini, nilai hash dihitung untuk kolom kunci partisi, dibagi dengan jumlah partisi, dan hasilnya menentukan partisi akhir.
Prosedurnya mirip dengan pemartisian rentang, tetapi alih-alih membagi data berdasarkan rentang nilai, pemartisian daftar membagi data berdasarkan sekumpulan nilai yang telah ditentukan.
Ambil kembali tabel suhu sebagai contoh.
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
30° F |
Alaska |
AS |
Musim dingin |
|
48.2° F |
Queensland |
Australia |
Musim panas |
|
100° F |
Andhra Pradesh |
India |
Musim panas |
|
35° F |
California |
AS |
Musim dingin |
|
96° F |
Texas |
AS |
Musim panas |
|
62° F |
Tasmania |
Australia |
Musim dingin |
Pada data di atas, kolom ‘Musim’ berisi daftar nilai [‘winter’, ‘summer’]. Jadi, pemartisian daftar berdasarkan musim terlihat seperti berikut:
Partisi 1:
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
30° F |
Alaska |
AS |
Musim dingin |
|
35° F |
California |
AS |
Musim dingin |
|
62° F |
Tasmania |
Australia |
Musim dingin |
Partisi 2:
|
Suhu |
Negara Bagian |
Negara |
Musim |
|
48.2° F |
Queensland |
Australia |
Musim panas |
|
100° F |
Andhra Pradesh |
India |
Musim panas |
|
96° F |
Texas |
AS |
Musim panas |
Partisi komposit adalah kombinasi dua teknik pemartisian. Sebuah tabel pertama-tama dibagi menggunakan satu strategi, lalu setiap partisi dibagi lagi menggunakan teknik lain.
Strategi pemartisian sering dibahas dalam wawancara teknis—lihat pertanyaan wawancara DBA teratas untuk 2025.
Sekarang setelah kita mengevaluasi berbagai jenis strategi pemartisian, mari kita lihat kapan pemartisian data berguna.
Sistem terdistribusi adalah kumpulan node yang secara fisik berada di server terpisah tetapi terhubung melalui jaringan. Contohnya termasuk Apache Cassandra, Amazon DynamoDB, dan Google Bigtable.
Sistem-sistem ini secara internal menggunakan pemartisian data untuk mengatur dan mendistribusikan data ke seluruh node.
OLAP merepresentasikan data multidimensi sebagai kubus, memungkinkan pengguna mengeksplorasi data dari berbagai sudut. Meskipun kubus ini merepresentasikan data yang sudah diagregasi sebelumnya, data dasarnya tetap sangat besar, sehingga kueri perlu dioptimalkan lebih lanjut menggunakan pemartisian data.
Sebagai contoh, menerapkan pemartisian kubus (sebuah teknik pemartisian data) membagi data menjadi kubus-kubus yang lebih kecil berdasarkan kriteria tertentu. Saat Anda mengkueri data, pencarian dilakukan pada kubus tertentu dengan melewati yang tidak relevan, sehingga mengurangi operasi I/O.
Demikian pula, pemartisian dimensi dapat diterapkan untuk membagi data berdasarkan level, hierarki, atau kolom.
Log berisi informasi tentang peristiwa, transaksi, dan operasi yang terjadi dalam sebuah sistem. Log digunakan untuk melacak kegagalan, bug, kasus tepi, hingga pesan keberhasilan.
Pemartisian log mempercepat proses debug dan memberi Anda informasi yang diperlukan dengan lebih cepat. Misalnya, jika Anda mempartisi log berdasarkan periode waktu, Anda dapat dengan mudah mengambilnya berdasarkan tanggal, minggu, bulan, atau tahun.
Dalam kasus penggunaan pembelajaran mesin, data dipartisi menjadi set pelatihan, validasi, dan pengujian. Pendekatan ini memastikan bahwa wawasan dari set pengujian tidak terungkap ke model selama pelatihan untuk menghindari overfitting.
Selain itu, jika data pelatihan sangat besar, satu mesin tidak dapat memproses dan memasukkan seluruh data ke dalam model. Jadi, data dibagi menjadi potongan-potongan dan dimasukkan ke model melalui pemartisian data.
Pemartisian data dapat diterapkan di basis data SQL maupun NoSQL. Mari kita bahas di bagian ini.
PostgreSQL menawarkan dukungan bawaan untuk pemartisian rentang, daftar, dan hash. Misalnya, kueri berikut membuat partisi untuk setiap tahun guna mengakses laba penjualan dan total penjualan tiap tahun fiskal secara efisien.
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL mendukung berbagai jenis pemartisian horizontal seperti rentang, daftar, hash, dan key partitioning. Untuk saat ini (versi 8.4), ini belum mendukung pemartisian vertikal.
Kueri MySQL di bawah ini mempartisi data karyawan menjadi tiga grup, p1, p2, dan p3, berdasarkan tanggal bergabung. Semua karyawan yang bergabung sebelum tahun 2000 masuk ke partisi p1. Karyawan yang bergabung antara 2000 dan 2010 masuk ke partisi p2, dan karyawan yang bergabung antara 2010 dan 2020 masuk ke partisi p3.
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
SQL Server menawarkan fitur pemartisian melalui fungsi partisi dan skema partisi. Fungsi partisi menentukan bagaimana data dibagi, sementara skema partisi menentukan filegroup tempat partisi akan disimpan.
Pada kueri berikut:
sales_by_yearsales_filegroupfg01, fg02, fg03, fg04Fungsi partisi:
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
Skema partisi:
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
Di sini, file menyimpan data sebagai berikut:
fg01 - tanggal sebelum ‘2024-01-01’,fg02 - ‘2024-01-01’ hingga ‘2024-01-31’fg03 - ‘2024-02-01’ hingga ‘2024-02-29’fg04 - ‘2024-03-01’ hingga ‘2024-03-31’Karena kita menyebutkan range right pada kueri, setiap tanggal batas termasuk dalam partisi berikutnya.
Jika Anda menggunakan SQL Server, tutorial SQL Server ini membahas konsep kunci dan alat untuk mengelola data terpartisi. Untuk jalur belajar terstruktur, jalur SQL Server Fundamentals memperkenalkan fitur inti yang dibutuhkan untuk membangun basis data SQL yang berperforma tinggi.
DynamoDB secara otomatis menangani pemartisian secara internal. Saat Anda menulis sebuah item ke tabel DynamoDB, item tersebut melewati request router. Router mengurai kunci partisi dan menerapkan fungsi hash. Keluaran fungsi hash menentukan partisi spesifik tempat rekaman akan disimpan.
Seluruh proses ini diotomatisasi di dalam DynamoDB, sehingga pengguna tidak perlu memikirkan fungsi hash atau bagaimana partisi dikelola.
MongoDB mendistribusikan data ke berbagai server melalui konsep sharding. Data dipartisi berdasarkan shard key, yang harus dipilih dengan cermat untuk menghindari distribusi yang tidak merata.
Biasanya, shard key harus memiliki kardinalitas tinggi dan merupakan kolom yang sering digunakan dalam kueri. Pertanyaan wawancara MongoDB ini mencakup hampir semua topik pentaing, termasuk sharding.
Cassandra partitioner adalah algoritme hashing yang menentukan node mana dalam suatu klaster yang harus menyimpan partisi tertentu. Kunci partisi diurai melalui algoritme untuk menghasilkan token. Token ini kemudian dibandingkan dengan nilai token yang ditetapkan pada node. Akhirnya, data disimpan pada node yang cocok dengan token tersebut.
Algoritme partisi yang umum termasuk Murmur3Partitioner, RandomPartitioner, dan ByteOrderedPartitioner.
Sekarang, mari kita bahas langkah-langkah yang diperlukan untuk menerapkan pemartisian data dengan benar.
Nilailah secara menyeluruh bagaimana aplikasi Anda mengkueri basis data, data apa yang sering diakses, ukuran data, dan hambatan kinerja. Wawasan ini akan membantu Anda menetapkan tujuan yang jelas untuk pemartisian dan mengidentifikasi kolom kunci yang sering terlibat dalam operasi data.
Kita telah membahas teknik umum sebelumnya, dan berikut cara memilih di antaranya:
Berikut adalah contoh kueri SQL untuk membuat partisi menggunakan pemartisian hash.
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
Pada kode di atas, kolom ‘location_id’ dilewatkan ke fungsi hash, dan keluarannya menentukan partisi tempat rekaman harus ditempatkan. Baris kode partitions 4 menentukan total jumlah partisi yang harus dibuat.
Tandai sebagai favorit lembar contekan SQL Dasar ini untuk merujuk sintaks inti SQL saat Anda mengimplementasikan partisi.
Optimalisasi datang dengan pertukaran dan tantangan, seperti halnya di dunia perangkat lunak. Berikut beberapa hal yang perlu Anda pertimbangkan:
Seperti yang Anda lihat, pemartisian data menjadi kompleks seiring pertumbuhan volume data. Namun, menerapkan praktik ini akan memastikan bahwa pemartisian meningkatkan efisiensi tanpa mengorbankan kinerja.
Pemartisian data yang efektif sangat penting untuk menjaga kinerja dan skalabilitas seiring pertumbuhan data Anda. Dengan strategi yang tepat, Anda dapat mengurangi latensi kueri, mengoptimalkan penyimpanan, dan menyederhanakan pemeliharaan. Ini adalah langkah praktis dengan dampak yang terukur.
Untuk pendalaman tentang bagaimana pemartisian memungkinkan sistem terdistribusi melakukan skala, lihat panduan tentang partisi Kafka. Untuk memahami bagaimana struktur relasional memengaruhi keputusan pemartisian, mulai dari kursus basis data relasional ini.
Srujana adalah penulis lepas di bidang teknologi dengan gelar sarjana Ilmu Komputer. Menulis tentang berbagai topik, termasuk data science, komputasi awan, pengembangan, pemrograman, keamanan, dan banyak lainnya adalah hal yang alami baginya. Ia menyukai sastra klasik dan menjelajahi destinasi baru.
Pelajari lebih lanjut tentang desain basis data dengan kursus-kursus ini!
{count, plural, one {Kursus} other {Kursus}}
{count, plural, one {Kursus} other {Kursus}}
{count, plural, one {Kursus} other {Kursus}}
{count, plural, one {blog} other {blogs}}
Dario Radečić
15 mnt
{count, plural, one {blog} other {blogs}}
David Woods
13 mnt
{count, plural, one {blog} other {blogs}}
Hugo Bowne-Anderson
13 mnt

{count, plural, one {blog} other {blogs}}
Javier Canales Luna
14 mnt