Arsip Tag: orm

Database Abstraction Layer :: Kemudahan Melawan Performa

koneksi antara aplikasi database engine, abstraction layer dan developer/user/application layer
koneksi antara aplikasi database engine, abstraction layer dan developer/user/application layer

Abstraction Layer atau lapisan abstraksi adalah suatu lapisan untuk menyembunyikan kerumitan yang ada pada fungsi-fungsi yang serupa. Begitu pula dengan Database Abstraction Layer, suatu pendekatan penyederhanaan/penyeragaman fungsi dari setiap database engine yang ada, jadi kita tidak perlu mengetahui fungsi API database spesifik yang kita gunakan, yang perlu kita ketahui hanyalah fungsi API dari Database Abstraction Layer yang kita gunakan. Terkesan sederhana. Ya, memang ini menjadikan pekerjaan programmer sederhana.
Mungkin selama ini anda pernah mendengar ODBC, khususnya bagi anda pengguna Windows, karena memang pada awalnya ODBC muncul di sistem operasi ini. ODBC adalah salah satu dari berbagai jenis Database Abstraction Layer yang ada. Jenis lainnya adalah ORM, di PHP tersedia ActiveRecord, Doctrine, dll; di Java ada Hibernate, dll. Juga ada jenis yang lebih sederhana, seperti pada PHP ada PDO(PECL), atau PEAR DB(PEAR).
Dengan pendekatan ini, para programmer akan semakin mudah dalam menghubungkan aplikasi yang mereka buat dengan database, tapi harus kita ingat bahwa setiap pemecahan masalah akan selalu menimbulkan masalah baru. Memang benar bahwa dengan menggunakan Doctrine, kita tidak perlu mengkhawatirkan engine database apa yang kita gunakan, kita bisa menggunakan postgreSQL, MySQL, MSSQL, ataupun juga Oracle; dengan menggunakan Hibernate kita hanya perlu menggunakan fungsi API hibernate saja. Tapi, dengan adanya abstraction layer, artinya ada rutin fungsi lain yang dijalankan, ya, dengan itu berarti aplikasi jadi yang kita buat bisa menjadi lebih lambat dalam mengakses data :(, sayang sekali…
Contohnya mungkin pada skrip php yang menggunakan PDO berikut ini:

<?php
// tentukan $dsn, $username dan $password
$dsn = "mysql:host=localhost;dbname=telepon";
$username = "user";
$passwd = "password";

try{
    $pdo = new PDO($dsn, $username, $passwd);
    $runq = $pdo-&gt;query("SELECT * FROM akun a, telepon t WHERE a.id=t.id_akun");
    foreach ($runq as $row){
        echo $row['nama']." ".$row['telepon']."&lt;br/&gt;";
    }
}catch(PDOException $e){
    echo $e-&gt;getMessage();
}
?>

Ini dia, lihat pada $dsn, disini $dsn bisa diganti dengan driver lain yang disupport oleh PDO, kita bisa mengubahnya menjadi mssql ataupun yang lainnya. Untuk menjalankan query, kita hanya perlu menjalankan $pdo->query($sql), dan lakukan iterasi untuk memunculkan hasilnya.
Namun, lihat pada objek PDO, objek ini menerima berbagai masukan jenis database engine yang ada, tapi mengeluarkan hasil yang sama, artinya ada sesuatu yang kompleks yang terjadi di dalam fungsi objek ini, dan tentunya itu akan makan waktu, yang berharga untuk setiap permintaan query user :(.
Dengan rangkuman bahwa Database Abstraction Layer memiliki:
Kelebihan

  • Waktu pengembangan (yang perlu dilakukan developer hanya mengetahui fungsi DBAL saja)
  • Tidak perlu mengkhawatirkan database engine (selama driver terpenuhi, maka fungsi DBAL akan berjalan sesuai keinginan)

Kekurangan

  • Waktu (karena DBAL menjalankan rutin fungsi yang lebih banyak daripada fungsi native yang disediakan, tentunya waktu query jadi lebih lambat)
  • Fungsi Kompleks Spesifik Engine (mengingat DBAL ini fungsinya untuk menyeragamkan fungsi dan hasil, kita tidak akan menemukan kelebihan spesifik (fungsi kompleks) dari engine database. misal: pengoptimasian query, karena tidak semua database engine menyediakan cara untuk optimasi query (lewat index), jadi DBAL-pun tidak menyertakannya)

dan, itulah garis besar dari database abstraction layer.