Kamis, 12 Februari 2009

Mengenal tiga jenis layanan email

Selama ini tentunya Anda telah mengenal tiga jenis layanan email, yaitu POP mail, email forwarding dan email berbasis web. Masing-masing jenis email tersebut mempunyai kelebihan dan kekurangan.

POP Mail
Email jenis ini sama dengan email yang Anda terima dari ISP Anda (bagi Anda yang connect internet dari rumah atau kantor).

Kelebihan :
Kelebihan utama POP mail adalah kemampuannya untuk dibaca secara offline (tidak connect ke internet). Untuk mengecek email, Anda perlu connect ke server POP mail Anda, lalu mendownload seluruh email yang ada. Setelah itu Anda bisa memutuskan hubungan dengan internet dan membaca email. Bila sudah siap dengan jawabannya Anda bisa connect lagi ke internet dan tekan Send. Untuk itu semua Anda harus menggunakan program client mail seperti Eudora atau Outlook Express.

Kekurangan

Kekurangan POP mail adalah Anda tidak bisa mengecek email Anda dari sembarang tempat.

Web Based email
Email jenis ini merupakan email yang ditawarkan berbagai situs seperti Yahoo, Hotmail, BolehMail, LoveMail dan lain-lain.

Kelebihan
Anda bisa mengecek email Anda dari mana saja dan browser apa saja.

Kekurangan
Kekurangan utama dari email berbasis web adalah, untuk mengecek email Anda harus selalu terhubung ke internet. Bagi yang hanya menerima beberapa atau belasan email tentu nggak begitu terasa. Tapi bagi Anda yang menerima puluhan email atau bahkan ratusan email tentu akan terasa kekurangannya terutama dalam hal biaya (menambah biaya, karena harus selalu connect ke internet).

Email Forwarding
Email jenis ini akan terasa manfaatnya bagi Anda yang belum menemukan layanan email yang cocok alias suka gonta-ganti email. Pada prinsipnya email forwarding ini merupakan layanan email yang meneruskan email yang dikirim kepadanya ke account email Anda yang lain.

Kelebihan
Anda bisa menyembunyikan alamat email Anda yang sesungguhnya. Selain itu Anda juga tidak perlu memberi tahu email Anda yang baru (jika Anda sering gonta-ganti email). Yang Anda berikan cukup alamat email forwarding tersebut.

Kekurangan
Karena bersifat sebagai perantara, email tersebut akan membutuhkan waktu yang lebih lama untuk sampai ke tempat Anda.

Telepon Melalui Internet

Dengan semakin mahalnya pulsa telepon tampaknya orang mulai mencari cara / alternatif untuk hubungan telepon. Pada kesempawtan ini saya mencoba membahas secara singkat tentang Internet Telepon. Mudah-mudahan dapat membantu memberikan gambaran kepada kita semua tentang teknologi satu ini. Perlu di catat bahwa teknologi ini akan membantu terutama pada saat sambungan Internet yang kita gunakan tidak mengalami "congested" atau kemacetan karena terlalu banyak traffic / yang menggunakan. Untuk memberikan sedikit gambaran mengapa teknologi ini menjadi menarik mari saya lampirkan sebuah tabel yang memberikan biaya yang dibutuhkan untuk melakukan interlokal internasional melalui Internet.

Negara
Biaya per menit
Brazil
US$ 0.32
Hongkong
US$ 0.18
Indonesia
US$ 0.48
Jepang
US$ 0.16
Tokyo
US$ 0.12
Malaysia
US$ 0.26
Taiwan
US$ 0.28
Taipei
US$ 0.19
Singapore
US$ 0.24
Filipina
US$ 0.35

Belum lagi jika kita menggunakan jasa net2phone. Harga yang diberikan mungkin hampir mustahil karena sekitar US$ 0.10 / menit ke Amerika Serikat, Eropa & Jepang. Melihat sedemikian besar insentif yang diberikan bagi hubungan interlokal SLJJ / SLI menggunakan Internet. Bersama artikel ini saya mencoba membahas secara garis besar tentang konsep-konsep yang mendasari Internet Telephony ini.

Pada gambar tampak secara garis besar sistem Internet Telephone yang dikembangkan di dunia pada saat ini. Pada prinsipnya, sistem tersebut dapat dibagi dalam beberapa hal yang cukup besar seperti :Belum lagi jika kita menggunakan jasa net2phone. Harga yang diberikan mungkin hampir mustahil karena sekitar US$ 0.10 / menit ke Amerika Serikat, Eropa & Jepang. Melihat sedemikian besar insentif yang diberikan bagi hubungan interlokal SLJJ / SLI menggunakan Internet. Bersama artikel ini saya mencoba membahas secara garis besar tentang konsep-konsep yang mendasari Internet Telephony ini.

  • Adanya Internet (dikenal sebagai IP network) sebagai media SLJJ / SLI antar negara yang relatif murah.
  • IP Telephony Gateway - yang menghubungkan antar gateway maupun PC di Internet yang ingin berhubungan ke standard telepon / FAX.
  • Telepon / FAX biasa yang terhubung ke PABX atau jaringan telepon PSTN milik Telkom yang dapat berhubungan melalui Internet dengan berhubungan melalui IP Telephone Gateway.

IP Telephony Gateway kebetulan dalam peraturan telekomunikasi yang ada saat ini di Indonesia masih ilegal digunakan oleh pihak-pihak diluar Telkom / Indosat. Tapi PC Multimedia yang tersambung ke Internet tetap dapat berlangganan kepada gateway-gateway yang ada di Internet yang tersambung ke jaringan-jaringan negara lain untuk melakukan SLI.

Secara teknologi, kita dapat melihat dalam gambar di samping bahwa suara di enkapsulasi dalam IP data packet dalam jaringan Internet yang di transmisikan dari masing-masing ISP termasuk ke PC Multimedia kita di rumah masing-masing.

Dalam jaringan telepon, suara di kodekan dalam modulasi Pulse Code Modulation (PCM) atau nada-nada FAX. IP telephony gateway bekerja menterjemahkan suara dalam modulasi PCM ke IP data packet.

Pada gambar di atas adalah fasilitas-fasilitas tambahan yang mungkin di gunakan dengan adanya Internet seperti call Waiting yang dapat di check melalui Browser Internet kita seperti tampak pada gambar. Jadi pada saat kita melakukan hubungan telepon melalui Internet, kita dapat mengetahui melalui Web browser kita jika ada telepon yang masuk.

Tentunya Internet Telepon tidak hanya terbatas pada hubungan suara saja, tapi juga kita dapat melakukan hubungan komunikasi video / multimedia juga. Tampak pada gambar di samping adalah tampilan jika kita melakukan hubungan video / multimedia conference melalui fasilitas Telepon Internet. Untuk dapat menerima transmisi video, PC multimedia yang kita miliki sebetulnya sudah mampu. Tinggal masalahnya adalah jika kita ingin mengirimkan gambar video ke lawan bicara kita, maka PC multimedia yang kita miliki perlu ditambahkan peralatan kamera video untuk dapat mengirimkan gambar tersebut. Ada beberapa tipe kamera CCD di PC yang harganya relatif murah US$100-200 / buah - yang siap untuk digunakan keperluan tersebut. Yang menarik dari teknologi Internet Telephony ini, standarisasi teknologi telah di lakukan & telah di akui oleh dunia Internasional termasuk International Telecommunication Union (ITU) yang merupakan salah satu lembaga tertinggi di dunia untuk mengatur dunia telekomunikasi.

Saya menyarankan untuk membaca lebih lanjut berbagai white paper maupun dokumen-dokumen yang dapat di download dari Internet, seperti dari:
http://www.vocaltec.com
http://www.lucent.com (keyword Voice over IP)
http://www.yahoo.com (keyword voip atau internet telephone)
http://www.infoseek.com (keyword voip atau internet telephone)
http://www.altavista.com (keyword voip atau internet telephone)

Firewall : security internet Oleh : Eueung Mulyana & Onno W. Purbo

Internet merupakan sebuah jaringan komputer yang sangat terbuka di dunia, konsekuensi yang harus di tanggung adalah tidak ada jaminan keamanan bagi jaringan yang terkait ke Internet. Artinya jika operator jaringan tidak hati-hati dalam menset-up sistemnya, maka kemungkinan besar jaringan yang terkait ke Internet akan dengan mudah dimasuki orang yang tidak di undang dari luar. Adalah tugas dari operator jaringan yang bersangkutan, untuk menekan resiko tersebut seminimal mungkin. Pemilihan strategi dan kecakapan administrator jaringan ini, akan sangat membedakan apakah suatu jaringan mudah ditembus atau tidak.

Firewall merupakan alat untuk mengimplementasikan kebijakan security (security policy). Sedangkan kebijakan security, dibuat berdasarkan perimbangan antara fasilitas yang disediakan dengan implikasi security-nya. Semakin ketat kebijakan security, semakin kompleks konfigurasi layanan informasi atau semakin sedikit fasilitas yang tersedia di jaringan. Sebaliknya, dengan semakin banyak fasilitas yang tersedia atau sedemikian sederhananya konfigurasi yang diterapkan, maka semakin mudah orang orang 'usil' dari luar masuk kedalam sistem (akibat langsung dari lemahnya kebijakan security).

Tulisan ini akan mencoba melihat beberapa kebijakan sekuriti yang lazim digunakan pada saat mengkaitkan sebuah jaringan ke Internet.

Firewall

Firewall adalah istilah yang biasa digunakan untuk menunjuk pada suatu komponen atau sekumpulan komponen jaringan, yang berfungsi membatasi akses antara dua jaringan, lebih khusus lagi, antara jaringan internal dengan jaringan global Internet. Firewall mempunyai beberapa tugas :

  • Pertama dan yang terpenting adalah: harus dapat mengimplementasikan kebijakan security di jaringan (site security policy). Jika aksi tertentu tidak diperbolehkan oleh kebijakan ini, maka firewall harus meyakinkan bahwa semua usaha yang mewakili operasi tersebut harus gagal atau digagalkan. Dengan demikian, semua akses ilegal antar jaringan (tidak diotorisasikan) akan ditolak.
  • Melakukan filtering: mewajibkan semua traffik yang ada untuk dilewatkan melalui firewall bagi semua proses pemberian dan pemanfaatan layanan informasi. Dalam konteks ini, aliran paket data dari/menuju firewall, diseleksi berdasarkan IP-address, nomor port, atau arahnya, dan disesuaikan dengan kebijakan security.
  • Firewall juga harus dapat merekam/mencatat even-even mencurigakan serta memberitahu administrator terhadap segala usaha-usaha menembus kebijakan security.

Merencanakan Jaringan Dengan Firewall

Merencanakan sistem firewall pada jaringan, berkaitan erat dengan jenis fasilitas apa yang akan disediakan bagi para pemakai, sejauh mana level resiko-security yang bisa diterima, serta berapa banyak waktu, biaya dan keahlian yang tersedia (faktor teknis dan ekonomis). Firewall umumnya terdiri dari bagian filter (disebut juga screen atau choke) dan bagian gateway (gate). Filter berfungsi untuk membatasi akses, mempersempit kanal, atau untuk memblok kelas trafik tertentu. Terjadinya pembatasan akses, berarti akan mengurangi fungsi jaringan. Untuk tetap menjaga fungsi komunikasi jaringan dalam lingkungan yang ber-firewall, umumnya ditempuh dua cara :

  • Pertama, bila kita bayangkan jaringan kita berada dalam perlindungan sebuah benteng, komunikasi dapat terjadi melalui pintu-pintu keluar benteng tersebut. Cara ini dikenal sebagai packet-filtering, dimana filter hanya digunakan untuk menolak trafik pada kanal yang tidak digunakan atau kanal dengan resiko-security cukup besar, sedangkan trafik pada kanal yang lain masih tetap diperbolehkan.
  • Cara kedua, menggunakan sistem proxy, dimana setiap komunikasi yang terjadi antar kedua jaringan harus dilakukan melalui suatu operator, dalam hal ini proxy server. Beberapa protokol, seperti telnet dan SMTP(Simple Mail Transport Protocol), akan lebih efektif ditangani dengan evaluasi paket (packet filtering), sedangkan yang lain seperti FTP (File Transport Protocol), Archie, Gopher dan HTTP (Hyper-Text Transport Protocol) akan lebih efektif ditangani dengan sistem proxy. Kebanyakan firewall menggunakan kombinasi kedua teknik ini (packet filtering dan proxy).

    Ada banyak literatur yang membahas masalah security & membagi arsitektur dasar firewall menjadi tiga jenis. Masing masing adalah:

  • arsitektur dengan dual-homed host (kadang kadang dikenal juga sebagai dual homed gateway/ DHG)
  • screened-host (screened host gateway/ SHG) � screened subnet (screened subnet gateway/ SSG).

Sistem DHG menggunakan sebuah komputer dengan (paling sedikit) dua network-interface. Interface pertama dihubungkan dengan jaringan internal dan yang lainnya dengan Internet. Dual-homed host nya sendiri berfungsi sebagai bastion host (front terdepan, bagian terpenting dalam firewall).

Pada topologi SHG, fungsi firewall dilakukan oleh sebuah screening-router dan bastion host. Router ini dikonfigurasi sedemikian sehingga akan menolak semua trafik kecuali yang ditujukan ke bastion host, sedangkan pada trafik internal tidak dilakukan pembatasan. Dengan cara ini setiap client servis pada jaringan internal dapat menggunakan fasilitas komunikasi standard dengan Internet tanpa harus melalui proxy.

Firewall dengan arsitektur screened-subnet menggunakan dua screening-router dan jaringan tengah (perimeter network) antara kedua router tersebut, dimana ditempatkan bastion host. Kelebihan susunan ini akan terlihat pada waktu optimasi penempatan server.

Selanjutnya, bagaimana relevansi arsitektur firewall tersebut terhadap level security? Suatu jaringan harus dapat menangani interaksi client-server, tidak terkecuali dengan kehadiran firewall. Sejauh ini, untuk operasi client internal - server internal, atau client internal - server eksternal, tidak terlalu menimbulkan masalah. Jika kita akan membuat sistem firewall untuk jaringan demikian, hanya dengan memasang proxy server pada bastion host dalam arsitektur yang dipilih, kualitas proteksi firewall yang bersangkutan akan maksimal. Artinya 'keselamatan' seluruh jaringan, sekarang hanya tergantung pada baik-tidaknya atau seberapa 'bagus' firewall tersebut dan tidak tergantung pada program-program yang lain. Beda halnya bila jaringan kita akan mendukung operasi client eksternal - server internal, atau dengan kata lain : jaringan internal kita menyediakan layanan informasi yang dapat diakses dari luar. Dalam konteks ini, harus diperhitungkan metoda penempatan mesin yang menjalankan program server, supaya mesin tersebut dapat dikenali dari internet dan sedemikian, komunikasi dengan client-nya dapat berlangsung dengan baik tanpa mengorbankan kepentingan security.

Arsitektur dual-homed menawarkan solusi sederhana dan murah. Satu-satunya mesin yang dikenal dari internet dalam sistem ini adalah dual-homed host-nya sendiri, dan dengan demikian ia menjadi satu-satunya mesin alternatif untuk menjalankan program server. Tetapi akan bermanfaat untuk mengingat, bahwa semakin banyak layanan yang disediakan atau semakin banyak program yang berjalan pada bastion-host, maka peluang penyusupan ke komputer tersebut semakin besar. Karena, seperti diyakini banyak orang, hampir dipastikan tidak ada program apapun yang bebas sama sekali dari bugs, apalagi untuk program-program berukuran besar. Dan sekali bugs ini dapat dieksploitasi oleh seseorang yang kemudian masuk ke dalam bastion-host, maka seluruh komputer di jaringan kita akan menjadi terbuka! Jika faktor ekonomis memaksa kita untuk tetap mengimplementasikan arsitektur DHG, maka ada beberapa nasihat yang patut diperhatikan, diantaranya: menggunakan perangkat lunak server yang telah teruji relatif 'aman' serta berukuran kecil, mereduksi dan mengoptimasi jumlah program yang berjalan, kemudian tidak memberikan account reguler pada bastion-host.

Dua arsitektur lainnya, screened-host dan screened-subnet, menyediakan pilihan lebih banyak. Screening-router dapat diatur untuk melakukan operasi packet filtering yang memungkinkan mesin-mesin tertentu dapat dikenali dari luar. Mesin mesin ini, kemudian menjalankan program-program server yang dapat diakses dari internet. Resiko dengan metoda seperti ini adalah penambahan jumlah komputer yang mungkin untuk diserang, sehingga akan lebih baik jika sebelumnya kita menyiapkan mesin-mesin tersebut dengan level security paling tidak sama dengan bastion-host atau kalau bisa, lebih.

Packet Filtering

Berbagai kebijakan dapat diterapkan dalam melakukan operasi packet filtering. Pada intinya, berupa mekanisme pengontrollan data yang diperbolehkan mengalir dari dan/atau ke jaringan internal, dengan menggunakan beberapa parameter yang tercantum dalam header paket data: arah (inbound atau outbound), address asal dan tujuan, port asal dan tujuan, serta jenis protokol transport. Router akan mengevaluasi informasi ini dalam setiap paket data yang mengalir melaluinya, kemudian menetapkan aksi yang harus dilakukan terhadap paket tersebut, berdasarkan set aturan/program dalam packet-filtering. Sehingga keputusan routing dasar router tersebut, kemudian dilengkapi dengan bagian dari kebijakan security jaringan.

Tabel berikut akan menunjukan contoh konfigurasi operasi packet-filtering, untuk menyediakan hanya fasilitas SMTP inbound dan outbound pada jaringan.

Aturan

Arah

Address Asal

Address Tujuan

Protokol

Port Tujuan

Aksi

A

masuk

eksternal

internal

TCP

25

ok

B

keluar

internal

eksternal

TCP

>1023

ok

C

keluar

internal

eksternal

TCP

25

ok

D

masuk

eksternal

internal

TCP

>1023

ok

E

sembarang

sembarang

sembarang

sembarang

sembarang

deny

Aturan A dan B melayani hubungan SMTP inbound (email datang), aturan C dan D melayani hubungan SMTP outbound (email keluar) serta aturan E merupakan aturan default yang dilakukan bila aturan aturan sebelumnya gagal. Kalau diamati lebih dekat, selain trafik SMTP konfigurasi tersebut juga masih membolehkan hubungan masuk dan keluar pada port >1023 (aturan B dan D), sehingga terdapat kemungkinan bagi program-program server seperti X11 (port 6000), OpenWindows (port 2000), atau kebanyakan program basis-data (Sybase, Oracle, Informix, dll), untuk dihubungi dari luar. Untuk menutup kemungkinan ini, diperlukan evaluasi parameter lain, seperti evaluasi port asal. Dengan cara ini, satu-satunya celah menembus firewall adalah dengan menggunakan port SMTP. Bila kita masih juga kurang yakin dengan kejujuran para pengguna port ini, dapat dilakukan evaluasi lebih lanjut dari informasi ACK.

Proxy

Dalam jaringan yang menerapkan sistem proxy, hubungan komunikasi ke internet dilakukan melalui sistem pendelegasian. Komputer-komputer yang dapat dikenali oleh internet bertindak sebagai 'wakil' bagi mesin lain yang ingin berhubungan ke luar. Proxy server untuk (kumpulan) protokol tertentu dijalankan pada dual-homed host atau bastion-host, dimana seluruh pemakai jaringan dapat berkomunikasi dengannya, kemudian proxy server ini bertindak sebagai delegasi. Dengan kata lain setiap program client akan berhubungan dengan proxy server dan proxy server ini lah yang akan berhubungan dengan server sebenarnya di internet. Proxy server akan mengevaluasi setiap permintaan hubungan dari client dan memutuskan mana yang diperbolehkan dan mana yang tidak. Bila permintaan hubungan ini disetujui, maka proxy server me-relay permintaan tersebut pada server sebenarnya.

Ada beberapa istilah menunjuk pada tipe proxy server, diantaranya proxy level aplikasi, proxy level circuit, proxy generik atau khusus, proxy cerdas dll. Apapun jenis proxy yang digunakan, ada beberapa konsekuensi implementasi sistem ini:

  • pada umumnya memerlukan modifikasi client dan/atau prosedur akses serta menuntut penyediaan program server berbeda untuk setiap aplikasi.
  • Penggunaan sistem proxy memungkinkan penggunaan private IP Address bagi jaringan internal. Konsekuensinya kita bisa memilih untuk menggunakan IP Address kelas A (10.x.x.x) untuk private IP address yang digunakan dalam jaringan internet; sehingga komputer yang dapat tersambung dalam jaringan internal dapat mencapai jumlah jutaan komputer.
  • Paket SOCKS atau TIS FWTK merupakan contoh paket perangkat lunak proxy yang sering digunakan dan tersedia bebas di internet.

Bahaya Program Anti Virus Oleh : Yohanes Nugroho

Sejak pertama ditemukan virus telah mengalami perkembangan teknologi yang cukup besar, demikian juga program Antivirus yang ada. Sayangnya perkembangan Antivirus biasanya hanya mengejar perkembangan virus dan bukan berusaha mendahuluinya. Antivirus yang ketinggalan (teknologinya) justru dapat mengundang bahaya bagi pemakai.

Ketika virus-virus berhasil dideteksi keberadaannya, virus-virus yang baru selalu bermunculan dengan teknologi yang lebih canggih yang membuat antivirus menjadi tak berdaya . Antivirus yang lama misalnya, selalu dapat di-'tipu' dengan teknologi stealth, dengan demikian ketika antivirus ini berusaha mendeteksi file-file yang lain, virus yang stealth tadi justru menyebarkan dirinya ke setiap file yang diperiksa.

Di berbagai majalah tentunya Anda sering melihat adanya program-program antivirus " satuan " (spesifik) yang tujuannya untuk mendeteksi satu jenis virus. Biasanya para pembuat antivirus tidak memberitahukan cara-cara yang benar untuk menggunakan program antivirus ini, padahal antivirus spesifik memiliki risiko yang besar jika tidak digunakan secara benar.

Antivirus spesifik hanya mampu mendeteksi satu jenis virus (dan mungkin beberapa variannya) dan biasanya mampu melumpuhkan virus di memori. Jika Anda menemukan suatu virus dan Anda yakin nama virusnya Anda bisa menggunakan Antivirus semacam ini, namun jika Anda tidak tahu, sebaiknya jangan coba-coba. Jika ternyata virus yang aktif adalah virus lain, yang tentunya tidak terdeteksi oleh antivirus ini, maka antivirus tersebut justru dapat menyebarkan virus yang ada ke seluruh file program yang diperiksanya.

Bahaya yang lebih menakutkan adalah jika antivirus salah mendeteksi suatu virus dan salah membersihkannya sehingga file program yang Anda coba untuk perbaiki justru menjadi rusak. Kejadian ini pernah terjadi misalnya pada kasus virus DenHard, virus ini benar-benar mirip dengan die hard, namun virus ini menggunakan teknik yang berbeda untuk mengembalikan header file yang asli, beberapa antivirus yang berusaha membersihkannya justru merusakkan file program tempat virus itu berada. Selain terjadi pada kasus virus DenHard, kasus inipun pernah (dan mungkin masih akan terus) terjadi pada beberapa virus. Salah satu alasan para pembuat virus membuat virus yang mirip adalah supaya virus tersebut sulit dibersihkan, karena para pembuat antivirus tidak suka jika virusnya dapat dengan mudah dibersihkan oleh user.

SUMBER BAHAYA PROGRAM ANTIVIRUS

Program Antivirus bisa berbahaya karena sebab-sebab berikut:

  • Beberapa program antivirus hanya menggunakan teknik sederhana yang bisa dengan mudah di-tipu oleh pembuat virus Misalnya program antivirus hanya memeriksa beberapa byte di awal virus, pembuat virus bisa saja membuat virus versi lain yang sama di bagian awal tetapi berbeda di bagian-bagian yang penting, misalnya di rutin enkripsi/dekripsi header file asli. Ini akan membuat program antivirus menjadi perusak file bukan penyelamat file. Beberapa antivirus juga dapat di tipu dengan mengubah-ubah file signature antivirus. File signature merupakan file yang berisi ID dari setiap virus yang dikenal oleh antivirus, jika ID tersebut di ubah maka antivirus tidak akan mengenalnya. Antivirus yang baik seharusnya dapat memeriksa jika file signature-nya berubah.
  • Program Antivirus tidak membuat backup file yang dibersihkan. Sering program antivirus (terutama yang spesifik) tidak menyediakan sarana untuk membuat backup file yang dibersihkan, padahal ini sangat penting andaikata proses pembersihan gagal.
  • Program Antivirus tidak melakukan self check. Self check itu perlu, program antivirus dapat saja diubah oleh orang lain sebelum sampai ke tangan pengguna. Program-program antivirus komersial biasanya melakukan self check untuk memastikan dirinya tidak diubah oleh siapapun, namun ada juga yang tidak dan ini berbahaya. Pada program-program antivirus lokal, yang sering disertakan pada beberapa artikel komputer, biasanya menyertakan source code-nya, sebaiknya Anda mengcompile sendiri source tersebut jika Anda ragu pada keaslian file exe-nya.
  • Program Antivirus residen bisa di matikan dengan mudah Antivirus residen yang baik seharusnya tidak bisa dideteksi dan di uninstall dengan mudah. Contoh antivirus residen yang kurang baik adalah VSAFE (ada di paket DOS). VSAFE bisa dideteksi dan dimatikan dengan menggunakan interrupt (coba Anda pelajari/debug program vsafe yang ada di DOS agar Anda mengerti). Pemakai akan mendapatkan rasa aman yang palsu dengan menggunakan antivirus semacam ini. Tidak ada rasa aman justru lebih baik dari rasa aman yang palsu.
  • Program antivirus tidak memberi peringatan kadaluarsa. Seiring dengan berjalannya waktu, virus-virus yang bermunculan semakin banyak dan tekniknya semakin canggih. Program antivirus yang baik sebaiknya memberi peringatan jika Antivirus yang digunakan sudah terlalu out of date. Ini penting supaya kejadian antivirus yang menyebarkan virus tidak terulang.

    INILAH YANG PERLU ANDA LAKUKAN SEBAGAI PENGGUNA

    Sebagai pengguna program antivirus ada beberapa hal yang bisa Anda lakukan untuk meminimalkan risiko penggunaan antivirus

  • Carilah antivirus yang baik, baik di sini artinya program tersebut dapat dipercaya untuk mendeteksi dan membasmi berbagai virus yang ada. Jangan terbuai dengan janji-janji yang ditawarkan para vendor antivirus, dan jangan terbuai juga dengan nama merk yang cukup terkenal. Cobalah cari perbandingan antara berbagai antivirus di berbagai majalah / situs di internet.
  • Gunakan selalu Antivirus terbaru, Anda bisa mendapatkannya dari Internet atau dari beberapa majalah. Antivirus yang lama memiliki risiko yang besar jika digunakan (lebih dari 6 bulan sudah sangat berbahaya).
  • Buatlah cadangan untuk data dan program Anda yang penting.
  • Lakukan proses pembersihan virus dengan benar jika Anda menemukan virus
  • Pastikan program Antivirus yang Anda dapat adalah yang asli, ada kemungkinan seseorang telah mengubah antivirus tersebut, atau mungkin menularinya dengan suatu virus.
  • Hubungi ahlinya jika Anda merasa tidak dapat mengatasi virus di komputer atau jaringan Anda.

Langkah proses pembersihan yang baik adalah sebagai berikut

Jika Anda menjalankan komputer pribadi

  1. Boot komputer Anda dengan disket startup yang bersih dari virus (dan di write protect)
  2. Jalankan program virus scanner/cleaner pada sebuah file yang terinfeksi
  3. Coba jalankan file tersebut, jika file tersebut menjadi rusak, jangan teruskan lagi
  4. Jika program dapat berjalan lancar, cobakan sekali lagi pada beberapa file (cari yang ukurannya kecil, yang sedang dan yang besar). File yang ukurannya besar perlu di-check, biasanya file ini mengandung internal overlay yang membuat filenya rusak jika terkena virus.
Jika Anda adalah Admin jaringan, sebaiknya Anda mengambil sampel virus ke disket dan mencoba untuk membersihkannya di komputer lain, ini dilakukan untuk tidak mengganggu pekerjaan yang mungkin sedang dilakukan oleh orang lain. Hal ini juga untuk mengantisipasi, kemungkinan adanya virus baru yang mirip dengan virus lain (bayangkan apa jadinya jika terjadi salah pembersihan sehingga seluruh program di jaringan menjadi tidak bisa dipakai!). Jika gagal dibersihkan Anda perlu memanggil ahlinya untuk menangani, atau mencari informasi lebih lanjut di Internet. Percobaan pada beberapa file tujuannya untuk mencegah salah deteksi dan atau salah perbaikan oleh program antivirus. Jika virus dianggap berbahaya dan aktivitas menggunakan jaringan bisa ditunda sementara, mungkin untuk sementara jaringan dimatikan.

SEBAGAI PROGRAMMER INI YANG PERLU ANDA LAKUKAN

Saat ini untuk menjadi programmer antivirus yang baik tidaklah mudah, Anda perlu tahu teknik-teknik pemrograman virus yang setiap hari semakin bertambah sulit. Program antivirus yang Anda buat sebaiknya juga mengikuti perkembangan teknologi virus. Untuk membuat program antivirus yang baik tidaklah mudah, namun ada beberapa hal yang perlu Anda ingat sebagai pembuat Antivirus jika Anda ingin program Anda dipakai orang lain, dan tidak membahayakan orang tersebut

  1. Program Anda sebaiknya bisa mematikan virus di memori, dan dapat memberi peringatan jika ada sesuatu yang aneh di memori komputer pemakai (misalnya besar base mem kurang dari 640 Kb)
  2. Dalam membuat ID virus pilihlah beberapa lokasi, lokasi yang baik adalah di awal virus dan di bagian penting virus (misalnya di bagian dekripsi header program asli) ini untuk memastikan tidak ada yang mengubah lokasi dan sistem enkripsi (jika ada) header program asli.
  3. Jika data/header di enkrip, verifikasikan data yang didapat dari perhitungan, misalnya lihat apakah CS dan IP asli yang di dapat dari perhitungan masih dalam batas besar file, atau apakah instruksi JMP pertama di file COM masuk akal (kurang dari panjang file).
  4. Buat cadangan file jika file yang dibersihkan dikhawatirkan rusak
  5. Lakukan self check di awal program. Jika tidak seluruh bagian program bisa di self check, bagian ID virus perlu diperiksa apakah berubah atau tidak (misalnya dengan checksum).
  6. Buatlah penjelasan yang jelas tentang cara penggunaan antivirus
  7. Jika program hanya dapat dijalankan di DOS periksalah selalu ketika program dijalankan apakah program tersebut benar-benar berjalan di DOS
  8. Jika ingin membuat program antivirus residen, jangan memakai ID virus yang tidak terenkripsi di memori, antivirus lain yang tidak mengenal antivirus Anda tersebut, justru akan menganggap adanya sebuah (atau beberapa buah) virus aktif di memori. Hal ini bisa terjadi, karena beberapa antivirus memeriksa seluruh memori terhadap adanya ID virus.
  9. Untuk antivirus yang non residen teknik no 8 juga perlu digunakan, ini perlu agar program antivirus yang lain tidak mengira program ini terkena virus. Kadang-kadang program juga meninggalkan bekas di memori, yang mungkin bisa dicurigai oleh antivirus lain sebagai virus. Jika Anda tidak ingin menerapkan teknik tersebut, Anda bisa menghapus memori variabel ID virus setelah selesai digunakan.
  10. Jika mungkin, untuk virus yang polimorfik gunakan metode heuristic (dan atau emulasi) untuk men-scan dan teknik emulasi untuk mendekrip, atau mengembalikan program asli.
Seharusnya 10 hal tersebut cukup, Anda bisa menambahkan sendiri hal tersebut jika perlu. Misalnya masalah kecepatan scanning dan lain-lain.

Simpulan dan penutup

Kiranya setelah membaca artikel di atas, para pemakai dan programmer antivirus dapat mendapatkan pengetahuan yang baru mengenai antivirus komputer. Sebagai pemakai antivirus, Anda harus lebih hati-hati, dan dengan rajin mengupdate antivirus Anda. Hal ini sangat perlu dilakukan, terutama bagi Anda yang terhubung ke Internet, sudah banyak virus yang menyebarkan dirinya lewat e-mail, dan dengan memanfaatkan beberapa bug dari perangkat email client Anda beberapa virus dapat menyebar tanpa Anda sadari (saat artikel ini dibuat, ada laporan dari sumber yang terpercaya bahwa ada bug di outlook yang memungkinkan attachment di eksekusi tanpa diketahui user).

Bagi para programmer antivirus, kiranya Anda tergerak untuk mempelajari lagi lebih banyak mengenai teknik-teknik virus, dan teknik-teknik untuk membasminya. Saat ini penulis virus di Indonesia belum terlalu banyak, tapi nanti ketika muncul berbagai virus dengan teknologi tinggi buatan bangsa sendiri, tentunya kita harus bisa membasminya (dengan baik dan benar tentunya), tidakkah kita akan malu, jika harus menggantungkan diri pada antivirus buatan luar negeri?.

Artikel ini bukanlah artikel yang lengkap mengenai pembuatan program antivirus yang baik, juga bukan tutorial yang lengkap mengenai penggunaan antivirus dengan baik dan benar, melainkan hanya sebuah artikel singkat agar para pemakai dan programmer lebih mewaspadai virus dengan lebih memperhatikan aspek antivirusnya.

8 Hal Yang Harus Diketahui Programer Pemula Tentang MySQL

  1. 1. Tabel MySQL bukanlah array
  2. 2. Bahasa SQL dan Fungsi-Fungsi MySQL
  3. 3. LIMIT, LIMIT, LIMIT
  4. 4. Tipe Data
  5. 5. Normalisasi dan Pemodelan
  6. 6. Indeks
  7. 7. Konkurensi, Locking, dan Transaksi
  8. 8. Jenis Tabel
  9. Penutup

Time and again I am amazed at how bad the successful software packages out there are. Apache is easily outperformed by fnord, MySQL isn’t even a real database, PHP is so slow that Zend actually made a business model out of selling performance enhancing hacks for it.—diary Fefe

PHP+MySQL. Siapa yang tidak tahu bahwa duo sejoli ini adalah pasangan terpopular di dunia open source, bahkan di seluruh Internet. PHP telah menggeser Perl sebagai bahasa pilihan dalam membuat aplikasi Web, terutama bagi pemula. Dan PHP hampir selalu bersanding dengan MySQL; 90–95%+ skrip PHP di www.hotscripts.com mungkin bertuliskan “membutuhkan PHP dan MySQL”. Buku-buku PHP, termasuk untuk pemula, tidak akan dipandang afdol kalau belum membahas MySQL. Dan programer PHP, lambat atau cepat, mau atau tidak mau, pasti akan harus mengakrabi software database yang satu ini.

Sayangnya, banyak programer sudah bermain-main dan memakai MySQL secara live di situs produksi, padahal masih asing sama sekali dengan konsep database relasional. Bahkan sebetulnya MySQL juga banyak memiliki kekurangan dalam hal fitur SQL. Sehingga programer PHP tidak bisa memahami dan memanfaatkan kekuatan penuh database relasional + SQL.

Buat Anda para programer pemula yang memang masih awam dengan MySQL dan konsep database pada umumnya, tidak perlu minder atau khawatir. Di dunia IT yang bergerak serba cepat ini memang ada terlalu banyak hal yang harus dipelajari. Dan kebanyakan jadinya dipelajari sambil jalan, sambil dipraktikkan. Ketika mulai membangun CMS untuk satunet.com tahun 1999 pun, saya hanya punya skill terbatas tentang SQL: hanya tahu SELECT, UPDATE, DELETE, CREATE TABLE, dan DROP TABLE. Apa itu JOIN, bagaimana mengubah skema tabel, bagaimana mendesain database yang baik dan ternormalisasi, semuanya masih blank. Dan semua harus dipelajari sambil jalan. Tapi toh akhirnya semua baik-baik saja.

Lewat artikel ini kita akan membahas hal-hal dasar apa yang perlu diketahui agar bisa memakai MySQL dengan efektif dan efisien. Mari kita mulai dengan hal nomor satu:

1. Tabel MySQL bukanlah array

Programer PHP atau Perl tentu saja familiar dengan array dan hash, yang biasanya dipakai untuk menyimpan sekumpulan data terkait. Sebagian dari mereka yang tidak familiar dengan MySQL akan cenderung menganalogikan tabel database dengan array/hash (tepatnya, array of array atau array 2 dimensi). Tabel dipandang sama seperti sebuah array, hanya saja bisa berukuran besar sekali dan persisten (disimpan di disk).

Cara pandang ini tidak sepenuhnya salah, karena toh dalam mengambil record dari tabel biasanya ditampung ke dalam variabel array/hash. Hanya saja, cara pandang ini kadang-kadang membuat programer PHP melakukan sesuatu seperti:

$res = mysql_query("SELECT * FROM t1");
$rows = array();
while ($row = mysql_fetch_row($res)) $rows[] = $row;
echo “Jumlah record di tabel t1 = “, count($rows);

atau membuat tabel seperti:

CREATE TABLE t2 (
f0 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
f1 INT UNSIGNED,
f2 VARCHAR(5),
f3 VARCHAR(200),
f4 VARCHAR(200),
f5 BLOB
);

Apa yang salah dengan kode PHP pertama di atas, yang bertujuan mencari jumlah record dalam sebuah tabel? Si programer, yang terlalu terobsesi menganggap tabel MySQL sebagai sebuah array, mencoba membangun dulu arraynya dengan mengisi satu-persatu elemen dari hasil query agar nantinya bisa menggunakan fungsi array count(). Masalahnya, bagaimana kalau jumlah record ada 100 ribu? 1 juta? 10 juta? Bukan itu saja, selesai di-count() variabel $rows langsung dibuang lagi! Padahal, ada cara yang jauh lebih efisien:

SELECT COUNT(*) FROM t1

Hasil querynya hanyalah sebuah record saja, tak peduli berapa pun ukuran tabel t1.

Lalu apa yang salah dengan kode SQL kedua? Si programer Perl, dalam hal ini, terobsesi ingin mengambil tiap record di tabel dengan fungsi DBI $sth->fetchrow_array()

@row = $sth->fetchrow_array();
print $row[0]; # f0
print $row[1]; # f1
print $row[2]; # f2
# …

Enak bukan? Elemen ke-0 berisi nilai field f0, elemen ke-1 field f1, dst. Masalahnya, kemudahan ini mengorbankan nama field yang menjadi sangat tidak deskriptif. Belum lagi kalau tabel perlu diubah dengan menyisipkan field-field lain di antara field yang sudah ada. Atau field-field lama perlu dihapus. Semuanya akan menjadi mimpi buruk.

Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer PHP dan Perl yang melakukan kedua hal di atas? Percaya deh, ada. Saya pernah harus ketiban getah memaintain tabel dengan nama field kriptik seperti ini.

2. Bahasa SQL dan Fungsi-Fungsi MySQL

MySQL adalah database SQL bukan? Sayangnya, programer PHP pemula kadang terbatas sekali pengetahuan SQL-nya. Padahal, untuk menggunakan database MySQL dengan efektif, ia tidak boleh malas mempelajari bahasa kedua, yaitu SQL. Jika tidak belajar SQL, maka ada kemungkinan Anda akan melakukan hal-hal seperti:

$res = mysql_query("SELECT * FROM bigtable");
while ($row = mysql_fetch_assoc($res)) {
if ($row['age'] >= 40) {
echo “Ditemukan kustomer yang berusia lebih dari 40 tahun!\n”;
break;
}
}

Apa salah kode di atas? Si programer PHP mencoba mensimulasikan klausa WHERE SQL dengan melakukan pengujian kondisi di kode PHP. Padahal, yang seharusnya dilakukan adalah:

SELECT * FROM bigtable WHERE age >= 40

Ini amat mengirit trafik client/server karena tidak semua record harus dikirimkan dari MySQL ke program PHP Anda.

Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer PHP yang seperti ini? Percaya deh, ada.

SQL sudah menyediakan cara untuk menyortir data, memformat tampilan, mengelompokkan dan memfilter record, dsb. MySQL juga terkenal banyak menyediakan fungsi-fungsi, mulai dari manipulasi tanggal, angka, string, dsb. Kenali SQL dan fungsi-fungsi MySQL; jangan duplikasikan ini semua di PHP sebab akan lebih efisien jika dilakukan di level MySQL.

Ini contoh lain programer PHP yang tidak memanfaatkan fasilitas dari MySQL:

$res = mysql_query("SELECT * FROM customers");
while ($row = mysql_fetch_assoc($res)) {
# format semula yyyy-mm-dd...
preg_match("/(\d\d\d\d)-(\d\d?)-(\d\d?)/", $row[date], $matches);
# … dan ingin dijadikan dd/mm/yyyy
$tanggal = “$matches[3]/$matches[2]/$matches[1]“;
echo “Nama=$row[name], Tanggal lahir=$tanggal
\n”;
}

Padahal MySQL sudah menyediakan fungsi pemformatan dan manipulasi tanggal:

$res = mysql_query("SELECT name, DATE_FORMAT(date,’%d-%m-%Y’) as tanggal “.
“FROM customers”);
while ($row = mysql_fetch_assoc($res)) {
# tidak perlu capek-capek manipulasi string lagi…
echo “Nama=$row[name], Tanggal lahir=$row[tanggal]
\n”;
}

Poin no. 2 ini kedengarannya klise, tapi, seperti nasihat Inggris bilang: know thy tools.

3. LIMIT, LIMIT, LIMIT

Salah satu alasan mengapa MySQL sangat cocok untuk aplikasi Web adalah mendukung klausa LIMIT. Dengan klausa ini, mudah sekali membatasi jumlah record hasil yang diinginkan dalam satu perintah SQL. Tidak perlu bermain kursor atau bersusah payah lewat cara lainnya. Belakangan database lain seperti PostgreSQL dan Firebird pun ikut mendukung fungsionalitas LIMIT (dengan sintaks yang tidak persis sama tentunya).

Sayangnya, programer PHP sendiri yang belum mengenal MySQL dengan baik tidak menggunakannya dengan semestinya.

$res = mysql_query("SELECT name FROM users ORDER BY date");
$rows = array();
for ($i=1; $i<=10; $i++) $rows[] = mysql_fetch_row($res);

Si programer hanya berniat mengambil 10 record, tapi menyuruh MySQL mengambil semua record yang ada dulu. Bagaimana kalau ada 100 ribu record? 1 juta record? 10 juta? Seharusnya, setiap kali Anda menginginkan hanya satu, sepuluh, lima belas record, Anda perlu memberitahu MySQL lewat klausa LIMIT.

SELECT name FROM users ORDER BY date LIMIT 10

Sehingga kita bisa mengirit trafik komunikasi client/server dan mengizinkan MySQL melakukan optimisasi terhadap query tersebut.

4. Tipe Data

Berbeda dengan PHP dan bahasa-bahasa skripting yang mengizinkan kita menaruh apa saja dalam sebuah $variable tanpa deklarasi tipe terlebih dahulu, di MySQL kita perlu mendeklarasikan tipe-tipe data semua field yang ada pada saat membuat sebuah tabel. Seorang programer PHP yang tidak kenal MySQL kadang-kadang cenderung memilih jenis data yang salah (umumnya: memilih VARCHAR() padahal ada tipe data yang lebih tepat) dikarenakan tidak mengenal jenis-jenis data yang tersedia.

Berikut beberapa contoh kurang tepatnya pemilihan tipe data: 1) memilih CHAR(8) atau VARCHAR(10) dan bukannya DATE untuk menyimpan tanggal; kerugiannya, lebih boros tempat dan tidak bisa memanfaatkan fungsi-fungsi khusus tanggal; 2) memilih CHAR(3) atau CHAR(6) ketimbang TINYINT UNSIGNED untuk menyimpan data boolean (“YES” dan “NO”; atau “TRUE” dan “FALSE”; padahal jauh lebih irit dinyatakan dengan 1 dan 0 yang hanya menempati 1 byte); 3) memilih FLOAT atau DOUBLE dan bukannya DECIMAL untuk menyimpan jumlah uang; kerugiannya, FLOAT dan DOUBLE adalah berbasis biner dan seringkali tidak eksak dalam menyimpan pecahan desimal.

Nomor 3 sering terjadi karena programer biasanya hanya mengenal single/double floating point number yang tersedia di bahasa pemrograman. Padahal database umumnya menyediakan angka pecahan berbasis desimal yang bisa eksak menyimpan pecahan desimal.

Manual MySQL amat membantu di sini; di subbab tentang Column Types dijelaskan dengan rinci jenis-jenis data yang ada, termasuk rentang nilai yang dapat ditampung, berapa byte yang ditempati tipe data tersebut, dsb.

5. Normalisasi dan Pemodelan

Normalisasi, skema, entiti-atribut, primary key (PK) dan foreign key (FK), tabel entiti, tabel relasi, OLTP & OLAP… semuanya adalah istilah-istilah yang umum dijumpai dalam pemodelan fisik database. Sayangnya, banyak programer pemula tidak memiliki kemampuan modeling. Sehingga jika disuruh mendesain skema database (sekumpulan tabel-tabel beserta nama field dan tipenya) hasilnya tidak optimal bahkan berantakan. Skema yang buruk berakibat terjadinya duplikasi data, tidak scalable, performance yang buruk, tidak memenuhi requirements, dsb.

Modeling tentunya tidak bisa diajarkan dalam 1–2 hari, apalagi dalam artikel yang singkat ini. Anda perlu membaca buku-buku mengenai pemodelan database dan belajar dari pengalaman maupun dari model-model yang sudah ada. Tapi beberapa nasihat yang mungkin bisa saya berikan di sini adalah sbb.

Satu, langkah pertama dalam pemodelan adalah menemukan entiti-entiti. Entiti bisa dibilang “objek” yang akan kita gelluti. Misalnya, customer, produk, dan transaksi. Setiap entiti umumnya ditaruh dalam satu tabel, tabel ini disebut tabel entiti. Langkah kedua adalah mencari atribut-atribut entiti tersebut. Misalnya tabel customers memiliki atribut sapaan, nama, alamat (jalan + kota + kodepos + propinsi + negara), tanggal record ini ditambahkan, dsb. Langkah ketiga adalah mencari relasi di antara entiti-entiti. Umumnya relasi adalah satu dari: 1-1, 1-many, many-many. Misalnya, relasi antara transaksi dan produk adalah many-many, artinya sebuah transaksi pembelian dapat berisi banyak produk dan sebuah produk tentu saja dapat dibeli dalam lebih dari satu transaksi. Setiap relasi juga akan ditempatkan pada tabel, yaitu tabel relasi.

Dua, dalam pemodelan tidak ada istilah model yang benar atau salah. Yang ada adalah model yang tepat dan tidak tepat untuk keperluan tertentu. Misalnya, untuk aplikasi sederhana modelnya sederhana. Semakin kompleks aplikasi, model pun semakin rumit (jumlah entiti, relasi, dan atribut akan bertambah). Pada umumnya, seiring kompleksitas bertambah, yang tadinya atribut akan berubah menjadi entiti dikarenakan adanya kenyataan hubungan 1-many/many-many antara atribut. Contohnya, tabel customers memiliki atribut alamat. Jika kita ingin mendukung banyak alamat untuk satu customers, maka alamat akan menjadi entiti dan menempati tabel sendiri. Lalu kita membuat tabel relasi customers-alamat.

6. Indeks

Indeks adalah sesuatu yang berkaitan erat dengan implementasi, bukan modeling. Kita seringkali perlu menambahkan indeks pada sebuah field atau banyak field dikarenakan jika tidak ditambahkan maka performance database tidak menjadi praktis. Serba-serbi indexing juga mungkin terlalu panjang untuk bisa dijelaskan dalam artikel pendek ini, tapi intinya setiap kolom yang: 1) memiliki rentang nilai cukup banyak; 2) terletak pada tabel yang berisi banyak record; 3) seringkali disebutkan di klausa WHERE dan/atau ORDER BY dan/atau GROUP BY; perlu diberi indeks. Ini dikarenakan indeks membantu mencari secara cepat sebuah nilai dari banyak nilai yang ada. Beberapa contoh:

* Setiap primary key umumnya otomatis diberi indeks oleh database server, meskipun tabelnya masih berisi sedikit record atau bahkan kosong. Ini dikarenakan database perlu selalu mengecek keberadaan sebuah nilai field ini manakala ada sebuah record yang ditambahkan (ingat, PK artinya tak boleh ada dua record yang mengandung nilai field ini yang sama). Tanpa indexing, pengecekan akan linear dan memakan waktu lama.

* Field tanggal lahir dalam tabel customers kemungkinan besar harus diindeks. Bahkan dayofyear() field ini juga mungkin perlu diindeks. Mengapa? Karena: 1) rentang nilai cukup besar (365 hari dalam setahun x +- 60 jumlah tahun); 2) tabel customers potensial ukurannya besar; 3) sering disebutkan di klausa WHERE (misalnya mencari customer yang ultah hari ini).

* Field memo/notes kemungkinan besar tidak perlu diindeks (secara biasa). Mengapa? Karena meskipun 1) rentang nilai cukup besar; dan 2) tabel customers bisa besar; tapi 3) field ini tidak pernah disebutkan di klausa WHERE secara langsung (mis: Anda tidak pernah menyebutkan: … WHERE notes=’nilai catatan tertentu’ atau WHERE notes > ‘nilai tertentu’). [Catatan: ada indeks lain yang “tidak biasa” di MySQL, yaitu FULLTEXT. Tapi ini di luar cakupan artikel kita kali ini.]

* Field jenis kelamin mungkin tidak perlu diindeks, kecuali jika perbandingan pria:wanita amat drastis bedanya. Mengapa? Sebab: 1) rentang nilai yang ada hanyalah dua: L (lelaki) dan P (perempuan). Meskipun Anda beri indeks, tidak akan memperbaiki kinerja.

7. Konkurensi, Locking, dan Transaksi

Programer web pemula kadang-kadang tidak menyadari bahwa program/skrip yang dibuatnya tidaklah seperti program desktop yang dijalankan oleh satu user. Melainkan, dalam satu waktu bisa saja ada 10 atau 100 user yang “menembak” skrip Anda di Web. Karena itu, isu locking dan konkurensi penting sekali. Contohnya adalah seperti ini:

$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
$value++;
// do something else first...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");

Di antara baris pertama (saat kita mengambil nilai record) dan baris keempat (saat kita menaruh kembali nilai dalam record) mungkin saja telah terjadi beberapa kali perubahan terhadap si record. Misalnya, pada baris pertama klien1 memperoleh nilai $value = 100. Di baris 3 $value di-increment menjadi 101. Tapi apa yang terjadi jika selama selang waktu itu nilai record counter1 telah menjadi 103 (karena misalnya klien2, klien3, dan klien4 telah meng-incrementnya)? Oleh si klien1, counter1 direset kembali menjadi 101 dan akibatnya increment oleh klien2, klien3, dan klien4 hilang. Seharusnya nilai counter1 menjadi 104.

Untuk kasus di atas, pemecahannya cukup gampang. Lakukan increment secara atomik:

// tidak perlu ambil nilai counter dulu...
// do something else first...
$res = mysql_query("UPDATE counter SET value=value+1 WHERE name='counter1'");

Tapi dalam kasus lain, kadang-kadang kita harus melakukan locking terhadap tabel atau record untuk menjamin bahwa selama kita // do something else… klien2, klien3, dan klien4 tidak bisa seenaknya menaikkan nilai counter:

mysql_query(”LOCK TABLES cuonters”);
$res = mysql_query(”SELECT value FROM counters WHERE name=’counter1′”);
list ($value) = mysql_fetch_row($res);
// do something else first… increase value or something…
$res = mysql_query(”UPDATE counter SET value=$value WHERE name=’counter1′”);
mysql_query(”UNLOCK TABLES”);

atau (lebih baik karena kita tidak perlu melock keseluruhan tabel):

mysql_query(”SELECT GET_LOCK(’lock1′)”);
$res = mysql_query(”SELECT value FROM counters WHERE name=’counter1′”);
list ($value) = mysql_fetch_row($res);
// do something else first… increase value or something…
$res = mysql_query(”UPDATE counter SET value=$value WHERE name=’counter1′”);
mysql_query(”SELECT RELEASE_LOCK(’lock1′)”);

Ingat, locking dapat berakibat samping yaitu deadlock.

Transaksi. Transaksi pun sesuatu yang dipergunakan secara meluas di dunia database, tapi hampir tidak pernah kita jumpai di bahasa pemrograman (ini karena data di bahasa pemrograman ditaruh dalam variabel di memori semua; tidak ada isu disk yang crash/lambat/rusak/harus disinkronkan dengan data di memori). Karena itu Anda perlu memahami konsep ini dari buku-buku tentang database.

8. Jenis Tabel

Di MySQL dikenal istilah table handler dan jenis tabel. Saat ini ada 3 jenis tabel utama yang bisa dipakai di MySQL: MyISAM (default), BerkeleyDB, dan InnoDB. Yang perlu diketahui ada tiga hal: 1) tidak semua tabel mendukung transaksi (MyISAM tidak mendukung transaksi, jadi COMMIT dan ROLLBACK tidak melakukan sesuatu yang semestinya jika Anda menerapkan pada tabel MyISAM); 2) tidak semua tabel punya karakteristik performance yang sama (BerkeleyDB misalnya, lambat jika ukuran tabel besar) dan disimpan dengan cara yang sama (tabel MyISAM misalnya disimpan dalam 3 file: .MYI, .MYD, .frm sementara tabel-tabel dan database-database InnoDB disimpan bersama dalam daerah disk yang disebut tablespace; 3) distribusi MySQL yang bukan -Max tidak dikompile dengan dukungan terhadap BerkeleyDB dan InnoDB.

Nomor 3 penting Anda ketahui karena jika kita menginstruksikan MySQL untuk membuat database dengan jenis tertentu:

CREATE TABLE (...) TYPE=BDB;

Dan MySQL tidak dikompile untuk mendukung BerkeleyDB, maka MySQL tidak akan protes dengan error, melainkan membuatkan tabel tersebut untuk kita tapi dengan tipe default yaitu MyISAM. Jadi Anda perlu mengecek dulu menggunakan SHOW TABLE STATUS:

mysql> create table t4 (i int) type=innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> show table status from mydb like ‘t4′;
+——+——–+-…
| Name | Type | …
+——+——–+-…
| t4 | MyISAM | …
+——+——–+-…

Ternyata MyISAM!

Penutup

Sebetulnya untuk memakai MySQL dengan baik dan benar diperlukan skill-skill dasar lain seperti membackup, merestore, mengeset parameter-parameter server, memonitor server, dsb. Tapi itu semua lebih merupakan tugas seorang administrator (DBA).