Kelebihan dan kekurangan Postgre VS MySQL


Kelebihan dan kekurangan Postgre VS MySQL- pada beberapa waktu terakhir ini, MySQL dan Postgre merupakan dua buah produk database open source yang menjadi favorit dan paling banyak digunakan bagi para programmer. hal ini membuat bingung bagi para programmer pemula dalam memilih produk database yang akan digunakan dalam membangun aplikasi, kira kira mana yang lebih bagus diantara keduanya .sebenarnya pertanyaan ini tidak akan pernah mendapatkan jawaban yang pasti karena setiap programmer pasti memiliki sudut pandang tersendiri mengenai MySQL dan Postgre. namun disini saya akan mencoba memberikan perbandingan dari beberapa segi, dan jangan lupa untuk terus update berita tentang fitur baru dari masing-masing produk database, karena setiap fitur baru pasti akan menambah point kelebihan yang dimiliki oleh produk database tersebut. disini saya menggunakan masing-masing versi yaitu MySQL 3.23.49/4.0.1 dan PostgreSQL 7.2.

maksud dan tujuan model pembangunan


kedua database ini memiliki latar belakang yang berbeda di dalam proses pembangunannya.. MySQL dibangun berdasarkan solusi yang muncul dari penciptanya, TcX AB dalam mengolah data untuk aplikasi Website yang berfokus pada kecepatan pengolahan data. sedangkan PostgreSQL dikembangkan dari penelitian akademik. PostgreSQL pengembangannya fokus pada fitur OO, reliabilitas, dan dukungan terhadap SQL. tetapi pada perkembangannya kedua semakin memiliki fitur-fitur yang saling melengkapi . MySQL versi 4.x contohnya, berjanji akan menambahkan fitur-fitur  seperti: subselect, view, dsb. Sementara PostgreSQL, yang sempat mempunyai problem pada stabilitas dan skalabilitas di seri awal versi 6.x, juga kini sangat bagus dari segi kecepatan.

Pengembangan 

Pengembangan MySQL dimiliki secara terpusat  oleh perusahaan komersial di Swedia bernama MySQL AB (sebelumnya TcX AB). Perusahaan ini mendapatkan pemasukan utamanya dari menjual layanan support dan konsultasi MySQL. PostgreSQL dikembangkan secara lebih terdesentralisasi dan merakyat, tetapi  tetap diatur oleh sebuah kelompok online bernama PostgreSQL Development Group.
MySQL dirilis dalam rentang yang lebih sering (bisa lebih dari sekali dalam sebulan), sementara PostgreSQL sekitar 3–7 bulan sekali.

Jumlah pemakai

Menurut MySQL AB, saat ini jumlah pemakai MySQL sekitar 3 juta. sedangkan 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. namun 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 mempunyai stabilitas yang lebih tinggi, sebab satu proses anak yang mati tidak akan membuat seluruh daemon mati—walaupun  pada kenyataannya, dahulu ini kerap 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, namun mengunakan  lapisan emulasi Cygwin.

Acid Compliant

Sampai saat ini masih banyak yang mengatakan 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 yang membuat 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

perihal kecepatan ini relatif dan kadang juga jadi isu sensitif. Baik kedua pihak, ataupun pihak ketiga, pernah menerbitkan benchmark yang lalu ditepis atau dicibir karena tidak objektif.
Pada dasarnya perbandingan kecepatan keduanya seperti ini: MySQL terkenal cepat dalam mengeksekusi query sederhana. Dengan kata lain, bisa memroses lebih banyak SQL per satuan waktu. Tapi dalam kondisi load tinggi (jumlah koneksi simultan besar), PostgreSQL sering melewati MySQL untuk query dengan klausa JOIN yang kompleks, seperti dialami Tim Perdue saat mencoba kedua database untuk diterapkan 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 yang membuat banyak benchmark mengeluh, MySQL memperlihatkan 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 memperlihatkan hasil yang cukup menjanjikan (www.innodb.com/bench.html).
Masalah locking tabel bisa diakali dengan memilah tabel, supaya satu kelompok row dapat dilock tanpa mengganggu kelompok row lain. Bahkan ada pengguna MySQL yang memilah sebuah tabel besar berisi jutaan record menjadi ribuan tabel kecil-kecil.

Stabilitas

Keduanya dapat dikatakan 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 dibutuhkan

Fungsi Built In

MySQL dikenal memiliki banyak fungsi built-in, seperti modifikasi string (REPLACERIGHTLTRIMLCASE), matematika (LOGLOG10), tanggal, dsb. pada tahap ini MySQL lebih unggul.

interface

Keduanya sudah amat solid. Mulai dari API C/C++, driver database Perl/Python/PHP/Tcl, ODBC, JDBC telah didukung. Anda tidak akan kesusahan menggunakan database ini dari berbagai sistem dan bahasa pemrograman. MySQL juga mendukung OLEDB dan mendukung versi embedded guna dilink bersama aplikasi buatan Anda sendiri.

Full Text Indexing

MySQL mendukung indeks full text secara natif. PostgreSQL mendukung full text searching melalui program lain (contohnya: OpenFTS, openfts.sourceforge.net) yang menggunakan 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 digunakan sebagai backend bagi program search eksternal (contoh: DBIx::KwIndex, search.cpan.org/search?dist=DBIx-KwIndex), meski mungkin tidak seefektif dibandingkan array di PostgreSQL.

Replikasi

Keduanya sudah mempunyai 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).

Manajemen User dan Keamanan

Kedua database menyimpan informasi user di sebuah database khusus. Sistem perizinan MySQL lebih mendetil daripada PostgreSQL. contohnya, kita bisa mengeset agar user tertentu yang datang dari host tertentu hanya dapat membaca tabel saja tanpa dapat UPDATE. Di PostgreSQL ini masih dapat 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/.

Tool Web/GUI

MySQL AB mengklaim lebih banyak tool grafis/web yang tersedia untuk MySQL, dan ini nampaknya cukup benar.

Tipe Data

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).

Modifikasi Tabel

MySQL lebih fleksibel dalam ALTER TABLE. PostgreSQL sendiri terbatas hanya dapat melakukan penambahan kolom, penggantian nama kolom, dan penggantian nama tabel. MySQL mendukung penambahan/penghapusan kolom, penggantian definisi kolom, dsb.

Fitur OO dan SQL

Dalam waktu beberapa tahun PostgreSQL akan tetap mempunyai 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 tidakmau repot, lebih baik menggunakan PostgreSQL. Tapi jika tidak butuh fitur SQL yang rumit-rumit, Anda masih punya kebebasan memilih satu dari dua.
selain itu MySQL pun tidak mempunyai fitur OO laykanya pewarisan tabel dan tipe data, atau tipe data array yang kadang praktis guna menyimpan banyak item data di dalam satu record.

Fitur Unik

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.

Comments