Sabtu, 26 Februari 2022

Ketidak-efisien-an Caching Dalam Bentuk File

Dua tahun terakhir ini lagi sering membuat website menggunakan public dataset. Dimana public dataset tersebut berisi setidaknya ratusan ribu baris bahkan ada yang sampai 5jt baris data. Awalnya saya menggunakan sqlite sebagai media penyimpanan, karena data nya tidak relasional dan tidak ada aktifitas penambahan data, perubahan data atau pengurangan data. Hanya aktifitas select saja, tapi ternyata sqlite bukan lah database yang cocok untuk handling data dengan jumlah besar. Dari namanya saja sudah lite. Biasanya hanya dipakai pada aplikasi-aplikasi statis dengan cakupan data yang tidak banyak. 

Akhirnya saya berpindah lagi ke mysql. Ternyata lagi2 mysql butuh resource yang lumayan jika di dalamnya terdapat data dengan jumlah yang banyak dan request bersamaan. Memori yang digunakan cukup besar dan ketika pengunjung website sudah banyak / saat mesin pencari melakukan crawl pada situs yang saya buat, performanya jadi turun. Loading website jadi lambat, dan ini tidak bagus untuk SEO. Yang mana saat ini page speed adalah salah satu ranking factor di SERP.

Berangkat dari problem tersebut akhirnya saya menggunakan sphinx-search sebagai engine pelengkap mysql. Request data tidak lagi ke mysql, namun ke sphinx-search, dimana performa seleksi data menjadi lebih cepat dan penggunaan memori yang tidak lagi tinggi. Sangat stabil dengan jumlah data yang besar. Keunggulan yang luar biasa yang dimiliki sphinx adalah fitur full text search engine, dimana engine ini sangat cepat dibanding fitur full text search bawaan mysql. 

Tidak berhenti dari situ saja, karena data saya bersifat statis dan tidak ada penambahan. Saya mengkombinasikan sphinx search dengan caching file. Dimana setiap request akan di cache ke dalam file. Jadi jika kedepan ada request yang sama, tidak perlu akses lagi ke sphinx, tinggal panggil data yang tersimpan di dalam file. Dengan kombinasi optimasi ini, website lancar jaya tidak ada problem apapun. Sampai suatu ketika terjadi pembengkakan jumlah file cache. Ketika umur website semakin lama dan banyak request data, tentunya jumlah file cache juga semakin banyak. Akhirnya penggunaan disk juga meningkat.

Sebenarnya tidak masalah dengan ukuran data nya, karena sampai saat ini kapasitas hardisk server saya baru digunakan 30% saja. Masih ada sekitar 2TB yang kosong. Namun masalahnya adalah jumlah inodes ternyata yang dibatasi, sehingga tidak bisa create file lagi. Jadi banyak sekali error_log yang tersimpan yang melaporkan not enough disk space. Padahal space masih besar, ternyata inodes nya sudah full.

Karena hal itu, akhirnya banyak halaman web yang tidak bisa dibuka dan menampilkan pesan error 500. Tentunya sangat berdampak di perfoma google search console, terdapat banyak sekali laporan website error 500, yang mana jika tidak segera diatasi dapat menyebabkan ranking web drop. Karena bingung solusinya apa, akhirnya saya kosongkan saja folder cache untuk sementara waktu dan menghentikan aktifitas caching ke dalam bentuk file. Karena ternyata tidak efisien, saat ini hanya mengandalkan performa sphinx-search, semoga ke depan tidak ada problem dan bisa menemukan solusi caching yang tepat.