Bukan bermaksud untuk copas isi blog, kali ini saya hanya ingin menyimpan artikel berharga dari mojokertocyber.com yang semoga saja bisa menjadi pengetahuan yang berguna bagi anda, langsung saja.
Bisakah Anda bayangkan ketika Anda memiliki berkas yang jumlahnya setiap hari bertambah. Ketika Anda hendak mengambil bagian yang terbawah, Anda pasti akan merasa kesulitan. Demikian juga pada database aplikasi (desktop maupun website). Dengan semakin banyaknya data yang masuk akan membuat kapasitas database semakin membengkak dan usaha yang dibutuhkan untuk mengambil data tertentu jug akan semakin sulit. Karena itu, diperlukan pengetahuan (dan seni) untuk mengelola database berskala besar. Berikut ini, kita akan membahas pengelolaan database aplikasi web dengan database MySQL.
MySQL
MySQL sangat populer digunakan dalam aplikasi web, termasuk oleh Facebook, Wikipedia, dan Twitter. Untuk perusahaan bisnis, kesalahan mengelola database bukan saja berarti kerugian pada sisi performa, tetapi ujung-ujungnya juga berpengaruh pada finansial.
Tentu saja pada umumnya kita tidak merasakan bahwa performa merupakan masalah besar jika database masih dalam skala kecil dan personal. Seseorang mungkin tidak pernah mengalami masalah dengan database walaupun rajin ngeblog pada website pribadinya selama sepuluh tahun. Namun, situasi yang sangat berbeda akan terjadi pada aplikasi website yang menyimpan ribuan record setiap harinya. Terkadang hal ini baru disadari belakangan saat aplikasi web semakin berkembang dan secara perlahan tetapi pasti performa mulai dirasakan menurun.
Saat mengalami hal tersebut, sebaiknya Anda tidak melakukan perbaikan/optimasi database secara live dengan database yang sebenarnya. Pasalnya, melakukan optimasi memerlukan percobaan berulang-ulang yang dikhawatirkan mengganggu aplikasi web. Karena itu, disarankan untuk melakukan dump database dari web server ke localhost dan melakukan berbagai perbaikan sampai benar-benar diyakini merupakan optimasi terbaik.
Salah satu cara memindahkan database dari server ke localhost adalah menggunakan fitur export dan import dari interface phpMyAdmin. Namun, jika database yang di-import cukup besar, kemungkinan proses import akan berhenti di tengah jalan dan phpMyAdmin akan menampilkan pesan "Script timeout passed, if you want to finish import, please resubmit same file and import will resume."
Cara lain untuk memindahkan database tersebut adalah menggunakan command line mysql.exe dengan sintaks:
mysql -u username -p databasename < filename.sql
Contoh:
mysql -u root -p dbcompany < dump.sql
Proses ini memang memakan waktu yang relatif cukup lama untuk data yang besar. Cara lainnya adalah menambahkan baris berikut pada file config.inc.php:
$cfg[`ExcecTimeLimit'] = 0;
Lalu, Anda dapat melakukan import seperti biasa pada phpMyAdmin. Seperti pada cara pertama, proses import database akan memerlukan waktu relatif lama, bergantung pada besarnya data.
Sekedar catatan, pada MySQL 5.5 atau versi di atasnya, default storage engine yang digunakan untuk tabel adalah InnoDB (pada versi sebelumnya default adalah MyISAM). Untuk data yang besar, pemilihan storage engine ini cukup penting dan dimungkinkan untuk tabel tertentu dengan menggunakan MyISAM, sementara tabel lainnya menggunakan InnoDB.
MyISAM unggul dalam hal kecepatan, sementara InnoDB unggul dalam segi fitur. Sebagai contoh, InnoDB mendukung row locking, sementara MyISAM hanya mendukung table locking. Jika tabel Anda memiliki transaksi yang padat sehingga integritas data merupakan isu yang sangat penting, Anda dapat mempertimbangkan untuk menggunakan storage engine InnoDB untuk tabel tersebut. Namun, untuk tabel yang banyak memerlukan pembacaan saja, MyISAM tampaknya lebih cocok diterapkan.
Optimasi 1: Index
Anda akan mengetahui masalah database dengan sendirinya saat aplikasi web menunjukkan performa yang menurun ataupun query bekerja dengan sangat lama. Penggunaan index pada kolom/field tertentu dapat dicoba untuk mempercepat pencarian walaupun pemberian index tetap memiliki konsekuensi (jika tidak, tentu seluruh field secara default akan di-index). Dengan melakukan index, diperlukan ruang harddisk yang lebih besar, terlihat pada file *.MYI yang merupakan file index engine MyISAM. Karena itu, harus diuji apakah menggunakan index tertentu akan membuat performa secara keseluruhan lebih baik atau lebih buruk. Secara umum, walau index mempercepat pencarian, jika terdapat banyak operasi manipulasi database (INSERT, DELETE, UPDATE), performanya justru dapat menurun.
Anda akan mengetahui masalah database dengan sendirinya saat aplikasi web menunjukkan performa yang menurun ataupun query bekerja dengan sangat lama. Penggunaan index pada kolom/field tertentu dapat dicoba untuk mempercepat pencarian walaupun pemberian index tetap memiliki konsekuensi (jika tidak, tentu seluruh field secara default akan di-index). Dengan melakukan index, diperlukan ruang harddisk yang lebih besar, terlihat pada file *.MYI yang merupakan file index engine MyISAM. Karena itu, harus diuji apakah menggunakan index tertentu akan membuat performa secara keseluruhan lebih baik atau lebih buruk. Secara umum, walau index mempercepat pencarian, jika terdapat banyak operasi manipulasi database (INSERT, DELETE, UPDATE), performanya justru dapat menurun.
Field yang dapat dipertimbangkan untuk di-index adalah field yang digunakan pada JOIN, GROUP BY, ORDER BY, atau digunakan pada kondisi WHERE.
Optimasi 2: Tipe data
Periksa kembali tipe data yang Anda gunakan, apakah ada yang dapat dioptimasiatau tidak. Untuk jumlah data yang besar, ketidaktepatan memberikan tipe data akan sangat memboroskan kapasitas. Contohnya tipe data MEDIUMINT yang memerlukan 3 bytes akan menggunakan ruang lebih hemat dibandingkan tipe data INT yang memerlukan 4 bytes. Namun, perlu diperhatikan juga bahwa konsekuensinya, nilai maksimal tipe data INT lebih besar (unsigned range dari 0-4.294.967.295). Bandingkan dengan nilai maksimal tipe data MEDIUMINT (unsigned range dari 0-16.777.215.).
Periksa kembali tipe data yang Anda gunakan, apakah ada yang dapat dioptimasiatau tidak. Untuk jumlah data yang besar, ketidaktepatan memberikan tipe data akan sangat memboroskan kapasitas. Contohnya tipe data MEDIUMINT yang memerlukan 3 bytes akan menggunakan ruang lebih hemat dibandingkan tipe data INT yang memerlukan 4 bytes. Namun, perlu diperhatikan juga bahwa konsekuensinya, nilai maksimal tipe data INT lebih besar (unsigned range dari 0-4.294.967.295). Bandingkan dengan nilai maksimal tipe data MEDIUMINT (unsigned range dari 0-16.777.215.).
Atribut signed atau unsignedjuga perlu dipertimbangkan. Signed berarti field tersebut menerima nilai minus atau dibawah 0, contohnya tipe data TINYINT signed dapat menampung nilai mulai -128 sampai 127. Sementara unsigned berarti nilai terkecil adalah 0, contohnya tipe data TiNYINT unsigned dapat menampung nilai mulai 0 sampai 255. Secara default, MySQL menentukan tipe data numerik dengan signed sehingga Anda perlu mengubahnya menjadi unsigned jika field tersebut tidak digunakan untuk menampung nilai minus.
Demikian pula penggunaan tipe data untuk menyimpan karakter/string, misalnya untuk field alamat. Walaupun sebuah alamat bisa saja cukup panjang, tentu tidak bijaksana memberikannya tipe data TEXT. Lebih baik menggunakan VARCHAR (100) jika nda berasumsi panjang maksimal alamat adalah seratus karakter dan validasi melalui aplikasi agar tidak dapat menyimpan alamat yang lebih panjang daripada seratus karakter.
Jika memungkinkan, deklarasikan setiap field dengan NOT NULL. Hal ini akan mengeliminasi pengecekan nilai NULL, walaupun Anda dapat mengabaikan saran ini jika Anda memang benar-benar perlu menyimpan nilai NULL. Gunakan nama field yang sederhana dan jelas. Contohnya pada tabel customer, buatlah field nama (bukannama_customer).
Untuk field yang menampung ID unik, pertimbangkan untuk menggunakan tipe data numerik ketimbang string karena lebih hemat dalam penggunaan memory/disk space dan tentu saja juga lebih cepat dalam mengakses
Oleh: Joko Nurjadi/PCMedia
Source From http://mojokertocyber.com/cyber-tech/web-design/141-mengelola-database-web-berskala-besar.html