PostgreSQL vs MySQL
Saat ini dengan mudah kita bisa mengatakan,
dua produk database
open source paling terkenal dan banyak digunakan adalah MySQL dan
PostgreSQL.
“Mana yang lebih bagus?” adalah pertanyaan yang hingga akhir zaman nanti
akan selalu terlontar. Kami tahu pertanyaan ini tidak ada
artinya, dan tidak membantu sama sekali. Namun di
artikel ini kami mencoba menyusun beberapa aspek dari kedua database
yang
berbeda satu sama lain. Harapan
kami, perbandingan ini membantu Anda menjawab pertanyaan “mana yang
sebaiknya
dipakai untuk [sebutkan kebutuhan Anda di sini].” Jangan
lupa pula, sebelum memutuskan selalu ceklah dulu homepage kedua database
sebab
dari waktu ke waktu fitur tiap database berubah/bertambah. Perbandingan
di artikel ini sendiri menggunakan versi MySQL
3.23.49/4.0.1 dan PostgreSQL 7.2.
Tujuan Desain
Dari semula latar belakang dikembangkannya kedua database ini sudah
berbeda. MySQL berkembang dari solusi yang dipakai
oleh pembuatnya, TcX AB, dalam memroses data
untuk aplikasi Web. Fokusnya adalah pada kecepatan.
PostgreSQL, di lain pihak, berkembang dari riset akademik.
Fokus pengembangan PostgreSQL adalah pada fitur OO,
reliabilitas, dan dukungan SQL yang mantap. Namun,
seiring kedua produk ini bertambah matang, keduanya semakin banyak memiliki
sifat-sifat ini. MySQL versi 4.x misalnya, berjanji menambahkan
fitur-fitur yang sejak lama diidamkan pemakainya: subselect, view, dsb.
Sementara PostgreSQL, yang sempat memiliki masalah stabilitas dan skalabilitas
di seri awal versi 6.x, juga kini telah amat menarik dari segi kecepatan.
Pengembangan
Pengembangan MySQL diatur secara sentral oleh perusahaan komersial di
Swedia bernama MySQL AB (sebelumnya TcX AB). Perusahaan ini
memperoleh pemasukan utamanya dari menjual layanan support dan konsultasi MySQL.
PostgreSQL dikembangkan secara lebih terdesentralisasi dan
merakyat, namun tetap diatur oleh sebuah kelompok online bernama PostgreSQL Development
Group.
MySQL
dirilis dalam satuan yang lebih sering (sebulan bisa lebih dari satu kali),
sementara PostgreSQL sekitar 4–6 bulan sekali.
Jumlah Pengguna
Menurut MySQL
AB, saat ini jumlah instalasi MySQL sekitar 3 juta. PostgreSQL
sendiri tidak diketahui pasti berapa jumlah penggunanya; kemungkinan masih
berada di bawah MySQL karena banyaknya situs Web dan perusahaan webhosting yang
hanya menggunakan MySQL. Plus secara keseluruhan
popularitas MySQL (trafik milis, tutorial/artikel yang membahas, dsb) lebih
besar daripada PostgreSQL. Tapi karena PostgreSQL juga
disertakan secara default di distro-distro Linux seperti Red Hat dan SuSE,
jumlah penggunanya pun sudah pasti banyak.
Arsitektur dan Portabilitas
MySQL memiliki arsitektur multithreading, sementara PostgreSQL
multiproses (forking). Ini berarti PostgreSQL potensial memiliki
stabilitas yang lebih tinggi, sebab satu proses anak yang mati tidak akan menyebabkan seluruh daemon mati—meskipun pada
kenyataannya, dulu ini sering terjadi. Di sisi lain,
arsitektur dengan forking ini sulit diterapkan ke Windows, sebab Windows amat
thread-oriented. Karena itulah, baru MySQL yang memiliki port
natif ke Windows. PostgreSQL sendiri saat ini bisa
dijalankan di Windows, tapi melalui lapisan emulasi Cygwin.
ACID compliance
Sampai sekarang masih banyak yang bilang MySQL itu tidak
ACID-compliant. Padahal sejak 2 tahun lalu MySQL sudah
mempunyai handler tabel BerkeleyDB, dan belakangan ini InnoDB, sehingga MySQL
sudah mendukung transaksi. Handler tabel MySQL yang
lama, ISAM dan MyISAM, tidak ACID-compliant. PostgreSQL
sendiri sejak lama telah ACID-compliant.
Lisensi
Lisensi PostgreSQL lebih liberal. Inilah sebabnya ada banyak
produk closed-source dan komersial yang bisa dikembangkan dari source code
PostgreSQL. MySQL, karena dilisensi di bawah GPL, tidak boleh
dimodifikasi menghasilkan produk turunan yang closed-source.
Kecepatan
Soal kecepatan ini relatif dan kadang juga jadi isu sensitif.
Baik kedua pihak, maupun pihak ketiga, pernah menerbitkan
benchmark yang lalu ditepis atau dicibir karena tidak objektif.
Pada dasarnya
perbandingan kecepatan keduanya seperti ini: MySQL terkenal cepat dalam
melakukan query sederhana. Dengan kata lain, dapat
memroses lebih banyak SQL per satuan waktu. Tapi dalam kondisi load tinggi
(jumlah koneksi simultan besar), PostgreSQL sering mengalahkan MySQL untuk
query dengan klausa JOIN yang kompleks, seperti dialami Tim Perdue saat mencoba
kedua database untuk diimplementasikan di SourceForge.net. Penyebab utamanya
adalah karena MySQL menggunakan locking level table
dalam UPDATE, sehingga koneksi yang lain tidak
bisa membaca table ybs sama sekali. Locking inilah juga
sebabnya mengapa pada banyak benchmark, MySQL menunjukkan penurunan kinerja yang
cukup drastis untuk kondisi jumlah klien simultan tinggi. PostgreSQL
mendukung locking di level yang lebih rendah, yaitu row. Table
handler baru di MySQL, InnoDB, juga mendukung row level locking.
Benchmark InnoDB pada jumlah koneksi tinggi menunjukkan hasil yang cukup
menjanjikan (www.innodb.com/bench.html).
Masalah locking
tabel bisa diakali dengan membelah-belah tabel, agar satu kelompok row dapat
dilock tanpa mengganggu kelompok row lain. Bahkan ada pengguna MySQL yang
membelah sebuah tabel besar berisi jutaan record menjadi ribuan tabel
kecil-kecil.
Stabilitas
Keduanya sudah bisa dibilang cukup hingga amat stabil. Tapi perlu diingat bahwa database manapun—bahkan Oracle—sesekali
dapat menyebabkan kerusakan data. Karena itu backup/history
periodik dan incremental tetap diperlukan.
Fungsi Built-In
MySQL terkenal kaya fungsi built-in, seperti modifikasi string (REPLACE, RIGHT,
LTRIM, LCASE), matematika (LOG, LOG10),
tanggal, dsb. Dalam hal ini MySQL lebih unggul.