Dhafiq Sagara adalah orang bodoh yang tidak bisa apa-apa, tapi dia selalu berusaha untuk terus menjadi yang lebih baik. Rasa keingin-tahuannya sangat tinggi, selalu berusaha dan terus berusaha, trial dan error adalah prinsip belajarnya.

16 Jun 2010

Range Partition Table - PostgreSQL

PostgreSQL mendukung fitur partisi pada tabel. Partisi disini mengenai pemecahan atau pembagian sebuah tabel master/tabel utama secara logic menjadi potongan-potongan fisik menjadi lebih kecil.





Partisi dapat memberikan beberapa keuntungan:
  1. Kinerja query dalam mengeksekusi perintah dapat ditingkatkan.
  2. Update kinerja dapat ditingkatkan juga, karena setiap potongan tabel memiliki indeks yang lebih kecil daripada indeks pada data yang akan mengatur keseluruhan. Ketika indeks tidak cocok lagi, dengan mudah memori membaca dan menulis operasi pada indeks dengan mengambil akses disk lebih progresif.
  3. Dalam menghapus data dalam kelompok besar, dapat dicapai hanya dengan menghapus salah satu partisi, jika kebutuhan yang direncanakan dalam desain partisi tabel, DROP tabel jauh lebih cepat daripada DELETE massal.
Manfaat biasanya akan tampak lebih jelas hanya jika tabel dinyatakan dalam jumlah sangat besar.


IMPLEMENTASI RANGE PARTITION TABLE

Untuk dapat lebih memahami mengenai partisi tabel pada postgreSQL, mari kita mengelompokkan nama-nama mahasiswa yang mendapat nilai A, B, dan C berdasarkan range nilai.
  1. Membuat tabel master
    create table mahasiswa(
    nim varchar(10) not null primary key,
    nama_mahasiswa varchar(50),
    nilai_mahasiswa integer
    )
  2. Membuat partisi tabel
    create table mahasiswa_a(
    check (nilai_mahasiswa >= 80 and nilai_mahasiswa <= 100)
    )inherits(mahasiswa);


    create table mahasiswa_b(
    check (nilai_mahasiswa >= 70 and nilai_mahasiswa < 80)
    )inherits(mahasiswa);



    create table mahasiswa_c(
    check (nilai_mahasiswa >= 60 and nilai_mahasiswa < 70)
    )inherits(mahasiswa);
  3. Agar data yang disisipkan/diinputkan masuk pada partisi yang sesuai, maka perlu adanya aturan secara kompleks yang mengatur hal ini. Gunakan query seperti berikut:
    create rule mahasiswa_insert_nilai_a as
    on insert to mahasiswa where
    (nilai_mahasiswa >= 80 and nilai_mahasiswa <= 100)
    do instead
    insert into mahasiswa_a values (new.nim,
    new.nama_mahasiswa,
    new.nilai_mahasiswa);



    create rule mahasiswa_insert_nilai_b as
    on insert to mahasiswa where
    (nilai_mahasiswa >= 70 and nilai_mahasiswa < 80)
    do instead
    insert into mahasiswa_b values (new.nim,
    new.nama_mahasiswa,
    new.nilai_mahasiswa);



    create rule mahasiswa_insert_nilai_c as
    on insert to mahasiswa where
    (nilai_mahasiswa >= 60 and nilai_mahasiswa < 70)
    do instead
    insert into mahasiswa_c values (new.nim,
    new.nama_mahasiswa,
    new.nilai_mahasiswa);
  4. Insert data:
    insert into mahasiswa values (‘07560242′, ‘Mudafiq Riyan’, 90);
    insert into mahasiswa values (‘07560254′, ‘Ivan Prasetya’, 70);
    insert into mahasiswa values (‘07560412′, ‘Abbi Yudha’, 85);
    insert into mahasiswa values (‘07560212′, ‘Sagara Pratama’, 67);
  5. Pengecekan:
    • Keseluruhan data yang telah diinputkan masuk pada tabel master: mahasiswa
      select * from mahasiswa
    • Data mahasiswa yang mendapat nilai A
      select * from mahasiswa_a
    • Data mahasiswa yang mendapat nilai B
      select * from mahasiswa_b
    • Data mahasiswa yang mendapat nilai C
      select * from mahasiswa_c
Kesimpulan: Partisi tabel ini berfungsi untuk memudahkan penganalisaan data berdasarkan golongan-golongan tertentu. Pada kasus di atas, kita bisa lebih mudah menganalisa mahasiswa siapa saja yang mendapat nilai A, B, dan C. Sehingga ketika ada data baru yang diinputkan, secara otomatis, data akan langsung diseleksi dan masuk pada partisi yang ditetapkan.

Tidak ada komentar:

Posting Komentar