• Programming

    Tentang sedjat1.dx.am

    Awalnya, saya cuma punya 1 blog di sedjat1.zz.mu, pada suatu saat saya gak bisa akses web itu sama sekali. Sesudah beberapa jam saya gak bisa akses akhirnya saya putuskan untuk bikin blog lagi di hosting gratis yang lain. Dengan berbekal backup database yang ada di notebook, akhirnya saya bisa menduplikasi sedjat1.zz.mu ke blog.sedjat1.dx.am.

    Di tempat baru saya sengaja bikin sub domain sendiri untuk blog karena niatnya, saya bikin blog yang aneh bin ajaib, beda dari yang lain. Blog yang bentuknya seperti terminal console, yang kalo mau liat isinya, harus ngetik perintah dulu, biar kaya jaman DOS.

    Penampilan sedjat1.dx.am, bar putih yang paling bawah itu ngedip kaya kursor terminal.

    Rencananya kalo ngasih perintah dir baru muncul list entri blognya, terus ada perintah open untuk baca entry blog. Dan rencananya juga, engine blog nyimpen berkas blognya bukan di database. Karena ini buatan jaman dulu banget, jadi scriptnya juga masih cupu (klik READ MORE untuk source codenya).

    Tapi ternyata, sesudah blog baru selesai diinstall, ternyata hosting lama saya masih bisa di akses, akhirnya jadi punya 2 blog. Dan yang ini jadi blog ketiga. Uhuy.

  • Komputer,  Programming

    [Copy] Need for Speed

    Dicopy dari blog saya yg di blog.sedjat1.dx.am

    Sesudah bikin blog, langkah selanjutnya adalah mendaftarkan blog ini untuk di index di search engine. Maka saya langsung meluncur ke dmoz.org. Tapi ternyata dmoz.org udah ditutup, yg ada tinggal mirrornya aja dan saya gak dapetin cara untuk nambahin blog saya dalam salah satu direktorinya.

    Akhirnya saya nyari direktori internet lain yg bisa nampung blog saya ini. Akhirnya saya dapet daftar dari “Free Web Directories” yg ternyata gak free2 amat. Saya penasaran memangnya apa sih yg bikin web direktori itu gak free, datanya sebesar apa yg dibutuhkan untuk data web direktori itu?

    Saya berburu data. Dengan bersenjatakan google, akhirnya saya dapet mangsa juga: Dataverse. Dapet data dmoz.org per 12 Juni 2016. Ada 3 file yg bisa didownload, dan yang saya proses duluan yg tab delimited csv.

    Sekilas lihat datanya, saya langsung bikin table di MySQL, 3 table, standar aja (id primary key autonumber) 1 table struktur folder, 1 table daftar domain, 1 table mapping domain dan folder. Table “directory” isinya ID, NamaFolder, Parent_ID. Table “domain” isinya ID, NamaDomain. Table “domain_map” isinya ID, Domain_ID, Folder_ID.

    Tab delimited file cuma ada 2 field, domain dan array of path yg nantinya akan dimapping ke table “directory”. Program dibuat menggunakan PHP (bukan yg dibuka pake browser, tapi yg di jalanin lewat command prompt). Awalnya program berjalan lancar, tanpa hambatan, cepat. Tapi lama2 makin kelihatan lambat. Karena dlm scriptnya saya selalu memeriksa keberadaan data sebelum di insert, maka akhirnya saya buat index yang sesuai untuk semua table.

    Program kelihatan lebih cepat jalannya, tapi itu gak bertahan lama, gejala melambat langsung terlihat. Akhirnya program saya ubah lagi, terutama dibagian akses database. Yg sebelumnya pake fungsi, akhirnya saya buat PDO prepared statement untuk tiap query, jadi pas looping data cukup memanggil method execute dengan parameter yang sesuai. Ada kemajuan kecepatan walaupun tidak signifikan.

    Saya sadar sebenarnya index mempercepat perintah select, tapi memperlambat perintah insert. Dan semakin datanya banyak tambah beban juga. Akhirnya saya memutuskan untuk memakai cache data berupa array. Data table saya load ke dalam array, jadi pengecekan data existing dan lookup id saya lakukan pada array tidak mengakses database sama sekali, akses database hanya dilakukan pada saat insert data. Ini membuat database tidak memerlukan index (selain primary key).

    Saat scriptnya dijalankan, error: out of memory. Saya lupa ngeset maksimum memorynya. Running kedua kali… Wussss… langsung terlihat perbedaannya. Memang startupnya lama karena memuat semua data ke array, tapi sesudah itu data dengan amat sangat lancar dibaca dan distore ke database.

    Jadi seperti yang pernah saya tulis di entry blog sebelumnya: Selalu cari jalan tercepat, jangan puas hanya dengan hasil yang benar.

    Update:

    Diujung (row ke 2.3jt dari 2.4jt), memory yang dibutuhin udah ngelewatin batesan yg saya tentuin (1.6GB). Karena keterbatasan sisa RAM yg saya punya (2GB), akhirnya saya pake metode hybrid, yg di load ke array adalah data yang paling banyak di select, yaitu data directory, sisanya tetap akses ke database (dengan index). Hasilnya walaupun gak secepet yg full array, masih lebih cepat dari pada full db.

    MySql Table Information

    Console View and Source Text

    Speed is everything, but I can’t bite off more than I can chew.