Kamis, 12 September 2024

POSTGRESQL-partisi table

 

Panduan untuk Partisi Tabel PostgreSQL

https://rasiksuhail.medium.com/guide-to-postgresql-table-partitioning-c0814b0fbd9b
Rasiksuhail

Mengikuti

Waktu baca 7 menit
Foto oleh Caspar Camille Rubin di Unsplash

PostgreSQL adalah sistem manajemen basis data relasional sumber terbuka yang tangguh yang menawarkan berbagai fitur canggih untuk mengelola kumpulan data yang besar dan kompleks. Salah satu fitur tersebut adalah partisi tabel, yang memungkinkan Anda membagi tabel besar menjadi bagian-bagian yang lebih kecil dan lebih mudah dikelola yang disebut partisi.

Panduan ini akan mengupas konsep partisi tabel di PostgreSQL dan membahas bagaimana konsep tersebut dapat dimanfaatkan untuk meningkatkan kinerja kueri dan mengelola data secara efisien.

Apa itu Partisi Tabel?

Pemartisian tabel adalah teknik desain basis data yang digunakan untuk membagi tabel besar menjadi bagian-bagian yang lebih kecil dan lebih mudah dikelola yang disebut partisi. Setiap partisi pada dasarnya adalah tabel terpisah yang menyimpan sebagian dari data asli. Teknik ini dapat meningkatkan kinerja kueri dan manajemen data secara signifikan untuk kumpulan data besar.

Pemartisian dapat dilakukan berdasarkan satu atau beberapa kolom, seperti kolom tanggal atau rentang nilai. Misalnya, Anda dapat mempartisi tabel berdasarkan tanggal rekaman, di mana setiap partisi mewakili data untuk rentang tanggal tertentu. Saat melakukan kueri data, PostgreSQL dapat dengan cepat menghilangkan partisi yang tidak relevan dengan kueri, sehingga menghasilkan eksekusi kueri yang lebih cepat.

Manfaat Partisi Tabel

  1. Peningkatan Kinerja Kueri : Pemartisian memungkinkan basis data mempersempit data dengan cepat ke partisi tertentu, sehingga mengurangi jumlah data yang perlu dipindai selama kueri. Hal ini menghasilkan waktu eksekusi kueri yang lebih cepat, terutama untuk kumpulan data besar.
  2. Manajemen Data yang Lebih Mudah : Dengan pembagian tabel, Anda dapat mengelola kumpulan data besar dengan mudah dengan membaginya menjadi partisi yang lebih kecil dan lebih mudah dikelola. Hal ini dapat menyederhanakan tugas-tugas seperti pengarsipan data, pembersihan data, serta operasi pencadangan dan pemulihan.
  3. Pemuatan dan Pengindeksan Data yang Disempurnakan : Saat memuat data ke dalam tabel yang dipartisi, prosesnya dapat diparalelkan, sehingga penyerapan data menjadi lebih cepat. Selain itu, indeks pada tabel yang dipartisi dapat lebih efisien, karena hanya perlu mencakup sebagian kecil data.
  4. Penyimpanan Hemat Biaya : Partisi memungkinkan Anda menyimpan data lama atau yang jarang diakses pada media penyimpanan yang lebih murah, sekaligus menyimpan data yang sering diakses pada perangkat penyimpanan yang lebih cepat.

Metode Pemartisian di PostgreSQL

PostgreSQL menawarkan berbagai metode partisi, termasuk:

  • Pembagian Jangkauan
  • Pemartisian Daftar
  • Partisi Hash

Mari kita lihat masing-masing metode partisi

Pembagian Jangkauan

Pemisahan rentang adalah jenis pemisahan tabel di mana data dibagi menjadi beberapa partisi berdasarkan rentang nilai tertentu dalam kolom. Hal ini khususnya berguna saat menangani data deret waktu atau data apa pun yang memiliki urutan alami. Setiap pemisahan mewakili rentang nilai yang berbeda, dan data yang berada dalam rentang tersebut disimpan dalam pemisahan tersebut. Pemisahan rentang memungkinkan pengambilan data yang efisien dalam rentang tertentu, yang menghasilkan peningkatan kinerja kueri.

Mari kita pertimbangkan contoh tabel penjualan dengan struktur berikut:

BUAT  TABEL penjualan ( 
id_penjualan SERIAL,
tanggal_penjualan TANGGAL TIDAK NULL ,
id_produk INT ,
jumlah INT ,
jumlah NUMERIK , KUNCI
PRIMER
(id_penjualan, tanggal_penjualan) ) PARTISI BERDASARKAN RANGE (tanggal_penjualan);

Untuk membuat tabel yang dipartisi berdasarkan rentang untuk data penjualan ini berdasarkan kolom sale_date, kita perlu mengikuti langkah-langkah berikut:

Buat Partisi

Kita akan membuat tabel individual untuk mewakili setiap partisi, yang masing-masing mencakup rentang tanggal tertentu. Untuk tujuan demonstrasi, kita akan membuat tiga partisi: “sales_january,” “sales_february,” dan “sales_march.”

BUAT  TABEL sales_january PARTISI  sales UNTUK 
NILAI DARI ( '2023-01-01' ) HINGGA ( '2023-02-01' ); BUAT TABEL sales_february PARTISI sales UNTUK NILAI DARI ( '2023-02-01' ) HINGGA ( ' 2023-03-01' ); BUAT TABEL sales_march PARTISI sales UNTUK NILAI DARI ( '2023-03-01' ) HINGGA ( ' 2023-04-01' ) ;





Mengatur Batasan

Kita perlu menentukan batasan pada setiap partisi untuk memastikan bahwa data diarahkan dengan benar ke partisi yang sesuai. Dalam contoh ini, kita akan menggunakan batasan CHECK pada kolom sale_date untuk setiap partisi:

ALTER  TABLE sales_january TAMBAHKAN  KONSTRAINT sales_january_check 
CEK (tanggal_penjualan >= '2023-01-01' AND sale_date < '2023-02-01' ) ;

ALTER TABLE sales_february TAMBAHKAN KONSTRAINT sales_february_check
CEK (tanggal_penjualan >= '2023-02-01' AND sale_date < '2023-03-01' ); ALTER TABLE sales_march TAMBAHKAN KONSTRAINT sales_march_check CEK (tanggal_penjualan >= '2023-03-01' AND sale_date < '2023-04-01' );


Masukkan Data ke dalam Partisi

Sekarang, kita dapat memasukkan data ke dalam tabel penjualan, dan PostgreSQL akan secara otomatis mengarahkan data ke partisi yang sesuai berdasarkan sale_date:

MASUKKAN  KE penjualan (tanggal_penjualan , id_produk, jumlah, jumlah) 
NILAI ( '2023-01-15' , 101 , 5 , 100,00 );

MASUKKAN KE penjualan (tanggal_penjualan, id_produk, jumlah, jumlah)
NILAI ( '2023-02-20' , 102 , 10 , 200,00 );

MASUKKAN KE penjualan (tanggal_penjualan, id_produk, jumlah, jumlah)
NILAI ( '2023-03-10' , 103 , 8 , 150,00 );

Menanyakan Data dari Partisi

Saat meminta data, PostgreSQL akan secara otomatis mengakses hanya partisi yang relevan berdasarkan klausa WHERE.

-- Mengambil data penjualan untuk bulan Januari 
SELECT * FROM sales WHERE sale_date >= '2023-01-01' AND sale_date < '2023-02-01' ;

-- Mengambil data penjualan untuk bulan Februari
SELECT * FROM sales WHERE sale_date >= '2023-02-01' AND sale_date < '2023-03-01' ;

-- Mengambil data penjualan untuk bulan Maret
SELECT * FROM sales WHERE sale_date >= '2023-03-01' AND sale_date < '2023-04-01' ;

Kueri ini hanya akan mengakses partisi yang sesuai, sehingga menghasilkan peningkatan kinerja kueri.

Pemartisian Daftar di PostgreSQL

Partisi daftar adalah jenis lain dari partisi tabel di PostgreSQL, di mana data dibagi menjadi beberapa partisi berdasarkan nilai tertentu dalam kolom. Tidak seperti partisi rentang, yang menggunakan rentang nilai, partisi daftar memungkinkan Anda menentukan nilai tertentu untuk setiap partisi. Teknik partisi ini berguna ketika data dapat dikategorikan ke dalam kumpulan yang berbeda dan tidak tumpang tindih.

Mari kita pertimbangkan contoh tabel produk dengan struktur berikut:

BUAT  TABEL produk ( 
id_produk KUNCI PRIMER SERIAL ,
kategori TEKS,
nama_produk TEKS,
harga NUMERIK
) partisi menurut daftar(kategori);

Untuk membuat tabel partisi daftar untuk data produk ini berdasarkan kolom kategori, kita perlu mengikuti langkah-langkah berikut:

Buat Partisi

Kita akan membuat tabel individual untuk mewakili setiap partisi, dengan masing-masing partisi mencakup kategori produk tertentu. Untuk tujuan demonstrasi, kita akan membuat tiga partisi: "elektronik," "pakaian," dan "perabotan."

BUAT  TABEL elektronik PARTISI  produk 
UNTUK NILAI DI ( ' Elektronik' );

BUAT TABEL pakaian PARTISI produk UNTUK NILAI DI ( 'Pakaian' ); BUAT TABEL furnitur PARTISI produk UNTUK NILAI DI ( ' Perabot' ) ;



Mengatur Batasan

Karena pembagian daftar didasarkan pada nilai-nilai tertentu, kita tidak memerlukan batasan CHECK. Namun, kita perlu menyiapkan pembagian dengan benar dengan menambahkan baris-baris ke tabel yang sesuai.

Masukkan Data ke dalam Partisi

Sekarang, kita dapat memasukkan data ke dalam tabel produk, dan PostgreSQL akan secara otomatis mengarahkan data ke partisi yang sesuai berdasarkan kategori.

MASUKKAN  KE produk (kategori, nama_produk, harga) 
NILAI ( 'Elektronik' , 'Telepon Pintar' , 500,00 );

MASUKKAN KE produk (kategori, nama_produk, harga)
NILAI ( 'Pakaian' , 'Kaos' , 25,00 );

MASUKKAN KE produk (kategori, nama_produk, harga)
NILAI ( 'Perabot' , 'Sofa' , 800,00 );

Menanyakan Data dari Partisi

Saat meminta data, PostgreSQL akan secara otomatis mengakses hanya partisi yang relevan berdasarkan klausa WHERE.

-- Ambil produk elektronik 
SELECT * FROM produk WHERE kategori = 'Elektronik' ;

-- Ambil produk pakaian
SELECT * FROM produk WHERE kategori = 'Pakaian' ; |

-- Ambil produk furnitur
SELECT * FROM produk WHERE kategori = 'Furnitur' ;

Pemartisian daftar di PostgreSQL merupakan teknik yang berguna untuk mengelola dan meminta data berdasarkan nilai tertentu dalam kolom. Dengan membagi data ke dalam partisi berdasarkan kategori atau set berbeda lainnya, pemartisian daftar memungkinkan pengambilan data yang lebih cepat dan pengelolaan data yang lebih baik.

Partisi Hash di PostgreSQL

Partisi hash adalah jenis partisi tabel di PostgreSQL, di mana data dibagi menjadi beberapa partisi berdasarkan nilai hash dari kolom tertentu. Tidak seperti partisi rentang atau daftar, yang menggunakan nilai atau rentang tertentu, partisi hash menggunakan fungsi hash untuk mendistribusikan data secara merata di seluruh partisi. Teknik partisi ini berguna ketika Anda ingin mendistribusikan data secara merata di seluruh partisi untuk mencapai penyeimbangan beban.

Mari kita pertimbangkan contoh tabel pesanan dengan struktur berikut:

BUAT  TABEL pesanan ( 
id_pesanan KUNCI PRIMER SERIAL , tanggal_pesanan
TANGGAL , id_pelanggan INT , jumlah_total NUMERIK ) partisi dengan hash(id_pelanggan);


Untuk membuat tabel partisi hash untuk data pesanan ini berdasarkan kolom customer_id, kita perlu mengikuti langkah-langkah berikut:

Buat Partisi

Kita akan membuat tabel individual untuk mewakili setiap partisi, dengan setiap partisi mencakup rentang nilai hash tertentu. Untuk tujuan demonstrasi, mari kita buat tiga partisi.

BUAT  TABEL orders_1 PARTISI  pesanan 
UNTUK NILAI DENGAN (MODULUS 3 , SISA 0 ); BUAT TABEL orders_2 PARTISI pesanan UNTUK NILAI DENGAN (MODULUS 3 , SISA 1 ); BUAT TABEL orders_3 PARTISI pesanan UNTUK NILAI DENGAN ( MODULUS 3 , SISA 2 ) ;





Dalam contoh ini, kami menggunakan HASH()fungsi untuk menentukan bahwa data harus dipartisi berdasarkan nilai hash kolom customer_id. Kami menggunakan MODULUSdan REMAINDERuntuk menentukan jumlah partisi (3 dalam kasus ini) dan nilai sisa untuk setiap partisi.

Masukkan Data ke dalam Partisi

Sekarang, kita dapat memasukkan data ke dalam tabel pesanan, dan PostgreSQL akan secara otomatis mengarahkan data ke partisi yang sesuai berdasarkan nilai hash dari customer_id:

MASUKKAN  KE pesanan (tanggal_pesanan, id_pelanggan, jumlah_total) 
NILAI ( '2023-01-15' , 101 , 500,00 );

MASUKKAN KE pesanan (tanggal_pesanan, id_pelanggan, jumlah_total)
NILAI ( '2023-02-20' , 102 , 600,00 );

MASUKKAN KE pesanan (tanggal_pesanan, id_pelanggan, jumlah_total)
NILAI ( '2023-03-10' , 103 , 700,00 );

Menanyakan Data dari Partisi

Saat meminta data, PostgreSQL akan secara otomatis mengakses partisi yang sesuai berdasarkan nilai hash customer_id.

-- Ambil pesanan untuk customer_id 101 
PILIH * DARI pesanan DI MANA customer_id = 101 ;

-- Ambil pesanan untuk customer_id 102
PILIH * DARI pesanan DI MANA customer_id = 102 ;

-- Ambil pesanan untuk customer_id 103
PILIH * DARI pesanan DI MANA customer_id = 103 ;

Partisi hash di PostgreSQL merupakan teknik yang berguna untuk mendistribusikan data secara merata di seluruh partisi berdasarkan nilai hash dari kolom yang ditentukan. Dengan memanfaatkan fungsi hash untuk mendistribusikan data secara merata, partisi hash mencapai penyeimbangan beban dan meningkatkan kinerja kueri.

Partisi membuat penelusuran lebih cepat.

Pemartisian tabel PostgreSQL merupakan fitur hebat yang dapat meningkatkan kinerja dan pengelolaan kumpulan data besar secara signifikan. Dengan membagi data ke dalam partisi yang lebih kecil, Anda dapat mengoptimalkan kinerja kueri, menyederhanakan pengelolaan data, dan mencapai pemuatan dan pengindeksan data yang lebih efisien. Saat merancang strategi pemartisian, pertimbangkan data dan pola kueri Anda untuk memilih metode pemartisian yang paling tepat. Dengan implementasi yang tepat, pemartisian tabel dapat menjadi pengubah permainan untuk menangani sejumlah besar data di PostgreSQL.

Mulai Mempartisi!

Tidak ada komentar:

Posting Komentar