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.
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 OOP, 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 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.
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.
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.
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 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.
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.
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.
MySQL terkenal kaya fungsi built-in, seperti
modifikasi string (REPLACE, RIGHT, LTRIM, LCASE), matematika (LOG, LOG10),
tanggal, dsb. Dalam hal ini MySQL lebih unggul.
Keduanya sudah amat solid. Mulai dari API
C/C++, driver database Perl/Python/PHP/Tcl, ODBC, JDBC telah didukung. Anda
tidak akan kesulitan menggunakan database ini dari berbagai sistem dan bahasa
pemrograman. MySQL juga mendukung OLEDB dan memiliki versi embedded untuk
dilink bersama aplikasi buatan Anda sendiri.
MySQL mendukung indeks full text secara
natif. PostgreSQL mendukung full text searching lewat program lain (contohnya:
OpenFTS, openfts.sourceforge.net) yang memanfaatkan
tipe data arraynya untuk menyimpan indeks dokumen. Secara umum dapat dikatakan
bahwa indexing dengan MySQL lebih praktis, tapi dengan program ketiga lebih
banyak fitur dan opsi yang bisa diatur (mis: stemming, parsing kata
non-Inggris, dsb). MySQL juga, tentu saja, dapat dipakai sebagai backend bagi
program search eksternal (contoh: DBIx::KwIndex, search.cpan.org/search?dist=DBIx-KwIndex),
meski mungkin tidak seefisien dibandingkan array di PostgreSQL.
Keduanya sudah memiliki replikasi, meski
replikasi di MySQL barulah satu arah. Replikasi di PostgreSQL sendiri belum
disertakan dalam distribusi standarnya, namun Anda dapat mengunjungi situs gborg.postgresql.org/project/pgreplication/ (proyek
pgreplication).
Kedua database menyimpan informasi user di
sebuah database khusus. Sistem perizinan MySQL lebih mendetil daripada
PostgreSQL. Misalnya, kita dapat mengeset agar user tertentu yang datang dari
host tertentu hanya bisa membaca tabel saja tanpa bisa UPDATE. Di PostgreSQL
ini masih bisa dilakukan dengan VIEW misalnya.
Untuk masalah enkripsi koneksi, keduanya
mendukung SSL. Ada ekstensi PKIX bagi PostgreSQL yang menarik, sebab dapat
membuat tabel terenkripsi: http://www.dimensional.com/~bgiles/pkixdoc/.
MySQL AB mengklaim lebih banyak tool
grafis/web yang tersedia untuk MySQL, dan ini nampaknya cukup benar.
PostgreSQL lebih kaya dalam hal tipe data
(terutama yang domain-specific seperti tipe data geometris dan MONEY),
tapi MySQL sudah mendukung semua tipe data umum.
Di PostgreSQL sebelum 7.1, masih ada
keterbatasan yang cukup menyesakkan yaitu ukuran data BLOB maksimum adalah
8–32KB. Sejak 7.1, PostgreSQL juga dapat menyimpan data BLOB besar.
CHAR dan VARCHAR di PostgreSQL dapat menampung hingga 8
juta karakter (bandingkan dengan MySQL yang hanya 255).
MySQL lebih fleksibel dalam ALTER TABLE.
PostgreSQL sendiri terbatas hanya bisa melakukan penambahan kolom, penggantian
nama kolom, dan penggantian nama tabel. MySQL mendukung penambahan/penghapusan
kolom, penggantian definisi kolom, dsb.
Dalam waktu beberapa tahun PostgreSQL akan
tetap memiliki fitur yang lebih lengkap dibandingkan MySQL. Lebih banyak fitur
dari standar SQL92 yang diimplementasi oleh PostgreSQL. MySQL bahkan belum
mendukung subselek. View, trigger, foreign key checking (meski ini sudah ada di
InnoDB) dan stored procedure semua hanya ada di PostgreSQL. Sebagai pengembang
yang memutuskan memilih salah satu database, Anda perlu menanyakan kepada diri sendiri
dulu apakah ingin lebih bersusah-payah melakukan code around
fasilitas-fasilitas yang tidak ada di MySQL tersebut melalui bahasa pemrograman
(misalnya, stored procedure diganti dengan user-defined function, subselek
diganti beberapa kali SQL yang dibungkus dengan locking, dan tidak ada
“trigger” berarti Anda harus melakukan pengecekan secara manual). Jika tidak
ingin repot, lebih baik memilih PostgreSQL. Tapi jika tidak butuh fitur SQL
yang rumit-rumit, Anda masih punya kebebasan memilih satu dari dua.
Di samping itu MySQL pun tidak memiliki fitur
OO seperti pewarisan tabel dan tipe data, atau tipe data array yang kadang
praktis untuk menyimpan banyak item data di dalam satu record.
MySQL memiliki arsitektur yang memungkinkan
sebuah database terdiri dari beberapa jenis tabel, misalnya: yang transaksional
dan tidak, yang berbasis di memori atau di disk, yang terkompresi dan yang
read-only. MySQL mendukung protokol terkompresi yang bisa menghemat bandwidth
dan mengurangi latensi.
PostgreSQL memiliki tipe data array,
pewarisan tabel dan tipe data, serta sistem rule. PostgreSQL memiliki tipe-tipe
data “antik.” Di PostgreSQL Anda dapat menulis stored procedure (atau
procedural language, istilah di PostgreSQL) dalam beberapa bahasa: PL/Perl,
PL/Tcl, atau PL/PgSQL. PostgreSQL mendukung set/himpunan.
0 komentar:
Posting Komentar