Archive

Posts Tagged ‘codeigniter’

Cache your data

January 17th, 2008

Beberapa hari ini, gue diharuskan membuat aplikasi yang support diakses banyak orang dalam saat yang bersamaan. Dengan bertambahnya user akses berarti bertambah juga performance server yang diperlukan. Dalam riset beberapa hari ini, gue menemukan beberapa alternatif yang lumayan untuk mengurangi beban server. Gunakaan cache.

Apa itu cache?

Cache adalah proses membuat data sementara hasil render suata page ke dalam file atau database. Jika ada user lain yang meminta halaman yang sama ke server anda, anda tidak perlu merender lagi halaman tersebut, cukup baca hasil render yang sebelumnya.

Beberapa cara cache

1. memchached
memcached membantu anda untuk menyimpan hasil result dari query database ke dalam suatu server. Sebelum query anda dijalankan, anda akan mengecheck dulu di servernya memcached apakah query ini sebelumnya sudah dilakukan atau belom. Memcached menggunakan sistem hash dengan multiple server, sehingga anda bisa mengurangi sistem database anda menjadi sesedikit mungkin, sehingga bisa mengurangi cost untuk multi server databases.
Pro:
- Dipakai oleh situs2 besar seperti youtube, gamefaqs, dll, anda bisa melihat list lengkapnya di situs aslinya.
- Sangat membantu untuk mengurangi beban database. Menurut manualnya bisa mengurangi 8 koneksi database menjadi 1.
- 1 result hanya tersimpan di satu server, bukan di semua server. Pembagian server dibagi oleh sistem hashing. Jadi kalo anda punya 3 komputer dengan memory 2 giga, anda sama dengan mempunyai cache server dengan memory 6 giga.
- Berfungsi untuk banyak bahasa dan banyak sistem database.
Cons:
- Sangat memakan memory.
- Anda harus merubah semua logic code anda dari yang hanya baca dari database untuk check dulu ke cache baru baca ke database. Setelah baca dari database, anda akan memasukan result tersebut ke cache.

2. Code Igniter’s cache
Saya menggunakan codeigniter sebagai framework php saya. Keuntungan dari menggunakan framework ini adalah CI menyediakan fasilitas cache internal, tanpa load library tambahan. Anda hanya cukup memanggil satu baris ini di manapun code anda berada :

$this->output->cache(n);

dimana n adalah jumlah menit halaman itu ingin anda cache.
Pro:
- Sedikit sekali perubahan yang anda perlukan untuk menjalankan cache.
- Menggunakan sistem hash juga, tentu saja untuk paramater pemanggilan page yang berbeda, CI akan membuat file cache terpisah. /file/a/ tidak sama dengan /file/b/
- Tidak seperti memcache yang memcache result dari database yang masih harus di proses code PHP. CI mengload langsung code HTML yang sudah di render, hasilnya jauh lebih cepat.
Cons:
- Setiap web server mempunya cachenya masing2. Jadi masih akan membebani database walaupun halaman yang sama dipanggil, kalau user menggunakan server web yang berbeda.
- Membebani web server untuk menyimpan file cache.

Masih banyak cara lagi untuk melakukan cache. Kedua cara diatas bisa digabungkan untuk hasil yang lebih maximal lagi. Tetapi sejauh yang saya coba, cache CI sendirian cukup menurunkan beban server banyak. Sehingga jumlah 3 server bisa dikurangi menjadi 1 server saja.

Share

programming , ,

Code Igniter Problem

October 5th, 2007

Gue udah pake framework CodeIgniter ini mayan lama dech, kurang lebih 1 tahun terakhir. Tapi baru kemaren ini ketemu masalah dengan database connection nya. Begitu di liat di MySQL nya, banyak banget connection yang sleep. Connection ini ngabisin resource MySQL, jadi engga bisa buka connection baru lagi kalo udah sampe Max allowed connectionnya. Setelah teliti punya teliti dan browsing2 google rupanya masalahnya ada di config databasenya CI.

$config["default"]["pconnect"] = TRUE;

pconnect itu artinya persistent connection. Jadi setelah kelar transaction dia engga putus dari databasenya. Setelah diganti jadi FALSE, semua masalah langsung jadi beres ^^. Agak lama sich, tapi yach mao gimana lagi.

Sekian, semoga membantu

Share

programming

Switch to our mobile site