About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Cara Cepat Merestrukturisasi Tabel dan Data
PHP, SQL

Cara Cepat Merestrukturisasi Tabel dan Data

Artikel ini saya tulis berdasarkan pengalaman saya ketika dihadapkan pada suatu project untuk membuat sistem penilaian sertifikasi guru yang ternyata… cukup melelahkan dan memusingkan 🙂 but.. dinikmati sajalah.

Ada suatu kejadian yang sempat membuat saya dan tim hampir frustasi, namun akhirnya bisa terpecahkan. Kejadian ini terkait dengan proses restrukturisasi tabel dan data.

Dalam sistem penilaian yang diminta, terdapat beberapa item penilaian, secara sederhana katakanlah A, B, C, dan D. Masing-masing item tersebut nantinya akan diisi nilai tertentu berdasarkan portofolio guru yang dinilai oleh asesor.

Pada awal mulanya, saya coba rancang tabel untuk menyimpan nilai dari item-item tersebut sebagai berikut

Kode GuruItemNilai
K001A70
K001B10
K001C25
K001D40
K002A55
K002B50
K002C42
K002D60

Nah… contoh tabel di atas gambaran dari hasil penilaian dari 2 orang guru saja. Pada awal uji coba, semuanya tidak ada masalah alias baik-baik saja. Namun… ternyata begitu sistem ini dilaunch dan dijalankan secara simultan dalam jaringan yang dioperasikan oleh multi user.. lama-lama sistem menjadi tambah lambat. Padahal waktu itu baru 30% persen dari data yang telah berhasil dientri dan diproses dari total 8000 an data.

Feeling saya mengatakan, pasti ada sesuatu dari sisi scriptingnya. Setelah melalui proses pengecekan ulang terhadap efisiensi scripting disertai dengan bantuan anggota tim yang lain, scripting tidak ada masalah. Beberapa algoritma yang tadinya kurang begitu simpel, akhirnya dibuat menjadi lebih simpel. Namun… masalah yang sama kembali muncul.

Wah… ada apa gerangan.. apakah dari sisi networkingnya yang membuat prosesnya lambat, mungkin ada virus yang mem-flood jaringan? Setelah dicek juga tidak ada masalah dari sisi networking.

Akhirnya… setelah merenung beberapa saat, dan berdiskusi dengan tim maka feeling kami mengatakan “there’s something wrong with the database”. Apakah masalah ini disebabkan oleh struktur tabel yang tidak efisien? Selanjutnya kami mencoba merestrukturisasi tabel penilaian di atas. Kami mencoba mengubah struktur tabel tersebut menjadi seperti di bawah ini

Kode GuruABCD
K00170102540
K00255504260

Dilihat dari jumlah record, struktur tabel terakhir ini bisa lebih menghemat 25% (4 kali) daripada struktur sebelumnya. Coba bandingkan, apabila kita gunakan struktur tabel pertama maka total record yang nantinya tersimpan dalam tabel adalah 8000 x 4, karena terdapat 8000 an guru dan setiap guru memiliki 4 item penilaian, sehingga terdapat kira-kira 32000 an record. Sedangkan untuk struktur tabel yang baru hanya akan terdapat 8000 an record karena data item nilai seorang guru bisa disimpan dalam 1 baris record sekaligus.

Apakah dengan analisis tersebut bisa membawa efek yang signifikan terhadap kinerja proses dari sistem? Kita coba bereksperimen dengan ide tersebut.

Trus… bagaimana dengan data yang sudah telanjur dimasukkan ke tabel pertama yang sudah ada sekitar 30% dari 8000 guru atau kira-kira 2000 x 4 = 8000 an record dari 32000 record total. Untuk mengulangi lagi entri dari awal, jelas tidak mungkin. Dipindahkan satu persatu data ke dalam struktur tabel yang baru juga sangat tidak mungkin karena datanya ribuan. Akhirnya kami coba pakai script PHP untuk proses restrukturisasi data dan tabel ini.

Langkah restrukturisasi ini, saya bagi ke dalam 2 tahap. Tahap pertama saya akan coba mengambil data semua kode guru yang telah tersimpan dalam tabel yang lama, selanjutnya saya pindahkan ke tabel yang baru. Pada tahap ini, nilai untuk masing-masing item saya urus belakangan.

Adapun script yang saya buat untuk memindahkan data kode guru adalah sebagai berikut:

<?php

// koneksi ke db

$query = "SELECT DISTINCT kodeguru FROM tabel_lama";
$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil))
{
    $kodeGuru = $data['kodeguru'];
    $query2 = "INSERT INTO tabel_baru(kodeguru) VALUES = '$kodeGuru'";
    mysql_query($query2);
}

?>

Sehingga dari tahap pertama ini, akan diperoleh tabel baru dengan struktur dan data sbb:

Kode Guru A B C D
K001 0 0 0 0
K002 0 0 0 0

NIlai 0 pada setiap item karena efek dari penggunaan default value ketika membuat tabel.

Sekarang menginjak tahap ke dua yaitu memindahkan nilai-nilai setiap item dari tabel lama ke tabel baru. Untuk tahap ini, idenya hanya menggunakan proses update data saja pada tabel yang baru berdasarkan kode guru masing-masing.

Berikut ini script yang saya gunakan

<?php

// koneksi ke db

$query = "SELECT * FROM tabel_lama";
$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil))
{
    $kodeGuru = $data['kodeguru'];
    $item = $data['item'];
    $nilai = $data['nilai'];
    if ($item == "A") $query2 = "UPDATE tabel_baru SET A = $nilai WHERE kodeguru = '$kodeGuru'";
    else if ($item == "B") $query2 = "UPDATE tabel_baru SET B = $nilai WHERE kodeguru = '$kodeGuru'";
    else if ($item == "C") $query2 = "UPDATE tabel_baru SET C = $nilai WHERE kodeguru = '$kodeGuru'";
    else if ($item == "D") $query2 = "UPDATE tabel_baru SET D = $nilai WHERE kodeguru = '$kodeGuru'";
    mysql_query($query2);
}

?>

Alhamdulillah.. tidak sampai 3 menit, akhirnya saya peroleh tabel yang baru beserta data yang ambil dari tabel lama. Setelah menggunakan tabel yang baru ini, akhirnya sistem dapat berjalan lebih cepat dengan perubahan yang sangat siginifikan daripada sebelumnya.

Mudah-mudahan sharing pengalaman ini bisa bermanfaat bagi yang sedang mengalami masalah serupa 🙂

 

Bagikan artikel ini jika bermanfaat !

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply