Senin, 10 Desember 2007

Pengenalan ADOdb 1.1

Pengenalan ADOdb 1.1 Latar Belakang

Sebelum memulai penjelasan tentang ADOdb, permulaan bab ini akan menjelaskan latar belakang mengapa ADOdb diciptakan. Selama ini mungkin Anda telah berpengalaman membuat aplikasi database dengan PHP, di mana Anda mungkin telah hafal fungsi-fungsi database untuk MySQL, atau fungsi PHP untuk database yang sering Anda gunakan. Tetapi apakah Anda menyadari bahwa apabila aplikasi database Anda yang telah menjadi produk jadi seringkali hanya dapat menggunakan database tertentu saja? Inilah yang menjadi landasan diciptakannya teknologi abstraksi layer database. Apabila aplikasi database yang Anda buat ditujukan untuk MySQL maka akan mengalami kesulitan bila aplikasi database tersebut karena sesuatu hal terpaksa harus menggunakan database lain, seperti PostgreSQL. Apakah yang dapat dilakukan? Anda harus mengganti semua fungsi database spesifik untuk MySQL dengan fungsi database untuk PostgreSQL. Tentu hal ini akan menjadi masalah apabila aplikasi yang telah dibuat merupakan aplikasi yang kompleks. Permasalahan ini dapat teratasi apabila aplikasi kita menambahkan layer abstraksi database.



Layer Abstraksi database dapat ditambahkan dengan menggunakan API atau library /pustaka tertentu. Library atau API ini didesain untuk dapat bekerja dengan berbagai macam database server dengan sintaks atau fungsi yang sama. Perbedaan yang ada hanya pada konfigurasi saja sehingga apabila terjadi perubahan database yang digunakan, kita hanya perlu menyesuaikan konfigurasi untuk database pada aplikasi. Tentu menyenangkan, bila kita menghasilkan aplikasi database yang portabel dalam arti dapat berjalan di berbagai macam database tanpa menulis ulang kode program yang ada. Ini meningkatkan nilai dan kualitas program aplikasi yang telah dibuat.

Ada banyak pilihan untuk melakukan abstraksi database karena kita dapat menggunakan beberapa library atau class yang sudah ada, dua di antaranya adalah Pear::DB, PHPLib dan ADOdb.

1.2 Mengenal ADOdb

ADOdb merupakan kependekan dari Active Data Objects Data Base. ADOdb merupakan sekelompok pustaka atau class-class yang melakukan standarisasi untuk fungsi database dengan pemrograman PHP. ADOdb merupakan salah satu pustaka yang dapat kita manfaatkan sebagai layer abstraksi database. Fungsi utamanya adalah untuk menyembunyikan perbedaan database dan memberikan method sederhana untuk melakukan kueri pada berbagai macam database dengan perubahan kode seminimal mungkin.

ADOdb terkenal karena kecepatannya, kemudahan penggunaannya serta kelengkapan fasilitasnya.

Informasi ADOdb selengkapnya dapat diperoleh di:

http://php.weblogs.com/adodb

1.3 Kelebihan ADOdb

Kelebihan ADOdb adalah:

1. Mudah dimengerti oleh programmer Windows karena sintaksnya hampir sama persis dengan Microsoft ADO

2. Cepat, juga memiliki ekstension native untuk mempercepat proses

3. Telah terbukti handal dalam berbagai aplikasi nyata

4. Memiliki fungsi atau pustaka yang lengkap

5. Menyediakan kode pendukung untuk menangani insert dan update yang dapat diadaptasi ke berbagai database secara cepat. method disediakan untuk penanganan tanggal, penggabungan string dan karakter tanda petik string untuk berbagai database

6. Mudah untuk digunakan pada database lain karena kode spesifik dari database tertentu diletakkan pada fungsi tersendiri sehingga Anda tidak perlu melakukan perubahan pada logik utama dari class.

7. Mendukung banyak sekali database server

8. Performance Monitoring dan tuning library

  1. Paging Library
  2. Library untuk Manajemen session berbasis database
1.4 Aplikasi nyata yang menggunakan ADOdb

ADOdb telah terbukti stabil, cepat dan populer karena telah banyak aplikasi PHP di dunia yang memanfaatkan ADOdb.

Aplikasi yang menggunakan ADOb antara lain:

1. PHPLens

http:// www.phplens.com

Merupakan komponen data grid komersial yang mengizinkan baik desainer web dan programmer profesional untuk membangun dan memelihara aplikasi database pada Web dengan mudah. Dibuat oleh pembuat ADOdb.

2. ECreasol

http://www.ecreasol.com

Content Management System dari Switzerland yang dibangun dengan PHP dan ADOdb.

3. PostNuke

http://www.postnuke.com

Open Source Portal Content Management System/Weblog yang sangat terkenal, mirip PHPNuke.

4. NOLA

http://nola.noguska.com

Aplikasi akuntansi, inventory dan aplikasi job tracking berbasis web, berlisensi GPL dan dibuat oleh Noguska

5. DBForm

http://dbform.sourceforge.net

Library atau framework yang memudahkan kita dalam bekerja dengan web form dan untuk proses update database yang umum serta mendayagunakan class dalam bekerja dengan tabel database.

6. Gallery

http://www.menalto.com/projects/gallery/modules.php?op=modload&name=News&file=index

Aplikasi galeri/album foto yang canggih

1.5 Perbandingan Pear DB dengan ADOdb 1.5.1 Perbandingan Fasilitas/API

Feature

PEAR DB

ADOdb

dukungan Data Source Name (DSN)

ya

ya, bila mode kompatibilitas dengan Pear diaktifkan

Error Handling

PEAR

Module penanganan error yang dapat dikembangkan. Dukungan terintegrasi untuk 3 penanganan error:

- PEAR style
- menggunakan error_log
- Ditampilkan ke layar

Koneksi ke database

DB::Connect()

ADOConnection::Connect()
ADOConnection::PConnect()
ADOConnection::NConnect()

Mengikuti konvensi standar koneksi dari PHP

Diskonek dari database

DB::Disconnect()

ADOConnection::Close()

Mengirimkan perintah SQL

DB::Query()

ADOConnection::Execute()

Identifikasi peringatan

DB::isWarning()

Peringatan dikirim ke fungsi ADOConnection::outp(), tetapi tidak dikirim ke Error Handler. Perilaku default dari outp() adalah mengeluarkan ke layar. Hal ini dapat dioverridden.

Identifikasi Error

DB::isError()

Error dikirimkan ke error handler

Quote strings

DB::quote()

ADOConnection::qstr()

Mendapatkan informasi dukungan backend untuk fasilitas tertentu

DB::provide()

Menyediakan properti dengan nilai true atau false pada objek ADOConnection. Biasanya dimulai dengan $has*.

Auto-insert atau update record

DB::autoPrepare()

ADOConnection::GetInsertSQL() atau
ADOConnection::GetUpdateSQL()

Menjalankan kueri prepare

DB::execute()

ADOConnection::Execute()

Menjalankan sejumlah kueri prepare berulangkali

DB::executeMultiple()

Memanggil ADOConnection::Execute() dalam loop for

Menghasilkan kueri limit ( eq. SELECT …

LIMIT … )

DB::limitQuery()

ADOConnection::SelectLimit()

Mendapatkan kolom pertama, baris pertama dari kueri

DB::getOne()

ADOConnection::GetOne()

Mendapatkan baris pertama dari kueri

DB::getRow()

ADOConnection::GetRow()

Mendapatkan kolom tunggal dari kueri dari array

DB::getCol()

ADOConnection::GetCol()

Mendapatkan result-set sebagai associative array menggunakan kolom pertama sebagai key

DB::getAssoc()

ADOConnection::GetAssoc()

Mengembalikan result set sebagai array 2 dimensi

DB::getAll()

ADOConnection::getAll() atau ADOConnection::GetArray()

Baris yang berubah dari insert/delete/update

DB::affectedRows()

ADOConnection::Affected_Rows()

Determine whether rows are fetched as indexed atau associative arrays, atau as objects

DB::setFetchMode()

Set the $ADODB_FETCH_MODE variable for indexed atau associative arrays. For fetching rows as objects, use ADOResultSet::FetchObject().

Get the next number in a sequence

DB::nextID()

ADOConnection::GenID() atau
ADOConnection::NextID()

Create a sequence

DB::createSequence()

Otomatis dibuat.

Tetapi pada ADOdb 2.60 Anda dapat membuat secara menual menggunakan:
ADOConnection::CreateSequence()

Drop a sequence

DB::dropSequence()

Tersedia pada ADOdb 2.60
ADOConnection::DropSequence()

Mendapatkan info DB internal

DB::getListOf()

tersedia sebagai properti ADOConnection

Mendapatkan baris berikutnya

DB_Result::fetchRow()

ADORecordSet::FetchRow() atau
ADORecordSet::MoveNext()

Mendapatkan baris ke variabel yang sudah ada.

Fetch the row into existing variable

DB_Result::fetchInto()

ADORecordSet::FetchRow()

Mendapatkan jumlah kolom yang didapat

DB_Result::numCols()

ADORecordSet::FieldCount()

Mendapatkan jumlah baris yang didapat

DB_Result::numRows()

ADORecordSet::RecordCount()

Mendapatkan result berikutnya bila batch kueri dijalankan

DB_Result::nextResult()

ADORecordSet::NextRecordSet()

Mendapatkan info tentang resultset

DB_Result::tableInfo()

ADORecordSet::FetchField()

Error object

DB_Error

Pear menyediakan mekanisme meta-error di mana semua error dipetakan ke daftar error virtual. Masalah dengan pendekatan ini adalah pesan error telah disederhanakan sehingga proses debug penyebab error sebenarnya lebih sulit.

Objek PEAR error didukung bila emulasi PEAR diaktifkan.

Secara umum, debugging pada ADOdb lebih mudah karena proeperti ADOConnection::debug. Apabila true, maka semua perintah SQL, pesan debug dan error dikeluarkan ke output standar. PEAR DB tidak memilikinya, sehingga Anda harus memiliki kerangkan debugging sendiri.

Objek warning

DB_Warning

Tidak diperlukan

1.5.2 Perbandingan kecepatan

Penulis menampilkan pengukuran dan perbandingan kecepatan ADOdb dengan teknologi terkait pada bagian ini. Sumber perbandingan kecepatan ini berasal dari

http://phplens.com/lens/adodb/

Perbandingan Kecepatan pertama

Anda dapat melihat pada perbandingan kecepatan antara fungsi MySQL native, ADOdb dengan ekstension native, dbx, ADOdb biasan, PHPlib, MDB, PEAR DB serta M’base.

Perbandingan kecepatan ini dilakukan dengan mendapatkan 82 baris dari tabel products sebanyak 200 kali. Tes diulang 5 kali. Waktu koneksi tidak diikutkan dari perbandingan kecepatan. Nilai yang lebih rendah lebih baik, semua angka di sini adalah dalam hitungan detik.

Perhatikan tabel hasil perbandingan kecepatan berikut:

MySQL 1.12 1.12 1.17 1.15 1.14

ADOdbext 1.30 1.31 1.29 1.30 1.32

dbx ext 1.35 1.38 1.41 1.37 1.36 (index only)

ADOdb 1.43 1.47 1.47 1.44 1.45

dbx ext 1.53 1.52 1.52 1.52 1.55 (index/assoc/info)

PhpLib 1.53 1.62 1.64 1.64 1.57

MDB 1.77 1.75 1.75 1.76 1.73

PEAR DB 2.91 2.90 2.85 2.83 2.84 (fetchInto)

PEAR DB 3.14 3.13 3.22 3.12 3.16 (fetchRow)

M'base 4.51 4.55 4.46 4.54 4.52 (numeric indexes)

M'base 4.99 4.72 4.71 4.71 4.72 (assoc indexes)

Rata-Rata Overhead

MySQL 1.14 -

ADOdbext 1.30 14%

dbx 1.37 20% (index only)

ADOdb 1.45 27%

dbx 1.53 34% (index/assoc/info)

PhpLib 1.60 40%

MDB 1.75 54%

PEAR DB 2.87 152% (fetchInto)

PEAR DB 3.15 176% (fetchRow)

M'base 2.52 296% (numeric cols)

M'base 4.77 318% (assoc cols)

Perbandingan Kecepatan dua

Perbandingan Kecepatan pertama adalah perbandingan sintetis yang tidak mengukur kecepatan secara nyata. Perbandingan kecepatan kedua diusahakan lebih realistik, dengan mengukur request HTTP / detik. Pada tes ini, kita memilih dan menampilkan 82 baris dari tabel products, sekali tiap request halaman.

Perbandingan Kecepatan ini menggunakan HTTP benchmarking tool, M’soft Web App Stress Tool (WAST). Pengukuran ini juga dengan Turk MMCache Accelarator 2.3.23 terinstall dan tanpa terinstall.

Dua tes dijalankan dan dirata-rata untuk tiap tes. Nilai yang lebih tinggi akan lebih baik. Semua pengukurang dalam halaman / detik.

Dengan Tanpa

Accelerator Accelerator

MySQL 83.53 81.35

ADOdb 61.19 21.33

PEAR DB 52.85 25.26

Informasi detail mengenai perbandingan dan pengukuran kecepatan ini dapat dilihat di url:

http://phplens.com/lens/adodb/#2

1.6 Database yang didukung oleh ADOdb

Tentu Anda perlu mengerti apa sajakah database yang didukung ADOdb sehingga Anda dapat memutuskan untuk menggunakan ADOdb atau tidak sesuai kebutuhan aplikasi.

Database yang didukung oleh ADOdb antara lain adalah:

1. MySQL

2. PostgreSQL

3. Oracle

4. Microsoft SQL Server

5. Sybase

6. Sybase SQL Anywhere

7. Informix

8. FrontBase

9. SQLite

10. Interbase (Firebird and Borland variants)

11. Foxpro

12. Access

13. DB2

14. SAP DB

15. ODBC

Dengan melihat daftar tersebut, Anda dapat menyimpulkan bahwa ADOdb merupakan salah satu library yang dapat menjadi pilihan utama untuk layer abstraksi database dari aplikasi database berbasis PHP.

Tidak ada komentar: