Cara Cepat Merestrukturisasi 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 Guru Item Nilai
K001 A 70
K001 B 10
K001 C 25
K001 D 40
K002 A 55
K002 B 50
K002 C 42
K002 D 60
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 Guru A B C D
K001 70 10 25 40
K002 55 50 42 60
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:
01.<?php
02. 
03.// koneksi ke db
04. 
05.$query = "SELECT DISTINCT kodeguru FROM tabel_lama";
06.$hasil = mysql_query($query);
07.while ($data = mysql_fetch_array($hasil))
08.{
09.$kodeGuru = $data['kodeguru'];
10.$query2 = "INSERT INTO tabel_baru(kodeguru) VALUES = '$kodeGuru'";
11.mysql_query($query2);
12.}
13. 
14.?>
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
01.<?php
02. 
03.// koneksi ke db
04. 
05.$query = "SELECT * FROM tabel_lama";
06.$hasil = mysql_query($query);
07.while ($data = mysql_fetch_array($hasil))
08.{
09.$kodeGuru = $data['kodeguru'];
10.$item = $data['item'];
11.$nilai = $data['nilai'];
12.if ($item == "A") $query2 = "UPDATE tabel_baru SET A = $nilai WHERE kodeguru = '$kodeGuru'";
13.else if ($item == "B") $query2 = "UPDATE tabel_baru SET B = $nilai WHERE kodeguru = '$kodeGuru'";
14.else if ($item == "C") $query2 = "UPDATE tabel_baru SET C = $nilai WHERE kodeguru = '$kodeGuru'";
15.else if ($item == "D") $query2 = "UPDATE tabel_baru SET D = $nilai WHERE kodeguru = '$kodeGuru'";
16.mysql_query($query2);
17.}
18. 
19.?>
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.

Sumber: http://blog.rosihanari.net/cara-cepat-merestrukturisasi-tabel-dan-data/





Comments

Popular posts from this blog

10 Tips Untuk Mempercepat Akses Database MySQL

Membuat pencarian data lebih dari satu table pada database dengan php script

Error Login Lokomet..???