Semoga Bermanfaat

Selasa, 22 Oktober 2013

Recoverability, Serializability dan Schedule

   Setelah kita bahas tentang protokol transaksi konkuren, selanjutnya akan saya bahas tentang recoverability, serializability dan schedule. Cekidot . . .

Recoverability
       Pemulihan Basis Data / Recovery sangat penting untuk menjaga konsistensi setelah terjadi kegagalan pada sistem. Recoverability adalah kemampuan untuk membangun kembali atau pemulihan layanan jika mengalami kesalahan atau kegagalan komponen.Tujuan dari pemulihan basis data ini adalah untuk mengembalikan Basis Data kekeadaan konsisten semula.
     Seperti peralatan elektrik lainnya, komputer mudah terjadi kegagalan (Failure) atau kerusakan (crash). Beberapa penyebab kegagalan :

  • Aliran Listrik Putus : Data / informasi yang ada di Volatile Storage akan hilang.
  • Kesalahan Operator : Data yang dimasukan salah sehingga hasil dari eksekusi transaksi menjadi salah.
  • Kesalahan Perangkat Lunak : Mengakibatkan eksekusi transaksi berjalan tidak normal.
  • Kerusakan Disk (Disk Crush) : Informasi / data yang ada di dalam non volatile, storage bisa hilang.

Jenis - jenis Kegagalan yang sering dialami:

  • Logical Eror : System / program berjalan tidak normal, contohnya Bad Input, OverFlow/eror, Data Not Found, Out of Memory.
  • System Eror : System / pogram memasuki suatu kondisi yang tidak di harapkan, contoh : DeadLock.
  • System Crush : Terjadi kerusakan pada sistem. contoh : Hardware mulfunction (ketidakberfungsian perangkat keras ). Terjadi kerusakan pada sektor atau kepala rekam baca sehingga data menjadi rusak.

Ada beberapa teknik dalam melakukan recovery:

  • Defered upate / perubahan yang ditunda

          Perubahan pada basis data tidak akan berlangsung sampai transaksi ada pada poin disetujui (COMMIT). Jika terjadi kegagalan maka tidak akan terjadi perubahan, tetapi  diperlukan operasi UNDO untuk mencegah akibat dari kegagalan tersebut.
Ide dari protocol update yang tertunda :

  1. Sebuah transaksi tidak dapat merubah database pada disk hingga titik point
  2. Sebuah transaksi tidak dapat mencapai titik point hingga semua operasi

         Update disimpan dalam log dan ditulis ke disk .Karena database tidak pernah ter-update  ada disk hingga transaksi mencapai commit, operasi UNDO tidak diperlukan.  Operasi ini dikenal dengan algoritma recovery NO UNDO/ REDO. REDO dibutuhkan saat sistem gagal setelah transaksi mencapai commit tetapi sebelum perubahan disimpan pada database di disk.
        Keuntungan dari metode atau algoritma NO-UNDO/REDO adalah operasi transaksi yang tidak pernah dibutuhkan batal dilaksanakan, karena :

  1. Transaksi tidak mencatat setiap perubahan dalam database pada disk sampai mencapai point commit, yaitu sampai menyelesaikan eksekusi secara lengkap. Sehingga transaksi tidak pernah dirolled back karena kesalahan selama eksekusi transaksi.
  2. Transaksi tidak akan pernah membaca nilai yang ditulis oleh transaksi yang belum commit karena item tetap terkunci sampai transaksi mencapai titik commit. 


  • Immediate Update / perubahan langsung

        Perubahan Di teknik ini, database akan diupdate oleh beberapa   transaksi sebelum transaksi mencapai titik point. Operasi secara khusus disimpan di log pada disk dengan force-writing sebelum diaplikasikan ke  database. Jika transaksi gagal setelah menyimpan beberapa perubahan pada database tetapi mencapai titik commit, efek dari operasi pada database harus undone (lepas/ buka); harus rolled back.
       Jika transaksi mencapai commit sebelum semua perubahan ditulis ke database dikenal dengan algoritma UNDO/ REDO. Variasi dari algoritma ini adalah semua update disimpan dalam database sebelum  sebuah transaksi mencapai commit (membutuhkan hanya UNDO), dikenal dengan algoritma UNDO/NO-REDO

  • Shadow Paging

      Menggunakan page bayangan dimana pada prosesnya terdiri dari 2 tabel yang sama, yang satu menjadi tabel transaksi dan yang lain digunakan sebagai cadangan. Ketika transaksi mulai berlangsung kedua tabel ini sama dan selama berlangsung tabel transaksi yang menyimpan semua perubahan ke database, tabel bayangan akan digunakan jika terjadi kesalahan.
     Keuntungannya adalah tidak membutuhkan REDO atau UNDO, kelemahannya membuat terjadinya fragmentasi.

Serializability
     Masalah utama pengeksekuasian transaksi secara bersamaan adalah integritas dan validitas data. Untuk kedua hal perlu adanya sebuah mekanisme tertentu.
     Serializability adalah suatu aturan untuk menjadwalkan proses-proses transaksi yang dijalankan hampir bersamaan dengan tetap menjaga konsistensi data seolah-olah proses dari transaksi-transaksi tersebut dijalankan secara serial.
 
Cara menjaga serializability
  • Lock Based Protocol
         Merupakan suatu cara yang digunakan untuk tetap menjaga serializability pada data yang diakses oleh lebih dari suatu transaksi. Yaitu, apabila satu transaksi mengakses sebuah item data maka tidak akan ada transaksi yang dapat memodifikasi data tersebut.
        Ada dua jenis mode penguncian dasar yang digunakan dalam mekanisme ini yaitu:
  1. Bersama (Shared). Jika sebuah transaksi Ti  dapat melakukan penguncian dengan mode ini (dilambangkan dengan S) terhadap item data Q, maka Ti  dapat membaca, tapi tidak dapat mengubah nilai Q tersebut.
  2. Tunggal (Exclusive). Jika sebuah transaksi Ti  dapat melakukan penguncian dengan mode ini (dilambangkan dengan X) terhadap item data Q, maka Ti  dapat membaca maupun mengubah nilai tersebut.
Hal yang harus diperhatikan :
  1. Setiap transaksi harus meminta lock apabila akan melakukan operasi/mengakses  terhadap suatu data. Misalkan data  Q, mode-lock yang diterapkan terhadap data Q harus sesuai dengan operasi yang akan dilakukan.
  2. Transaksi meminta lock terhadap suatu data, kepada concurrency control manager.
  3. Operasi terhadap Q dapat dilakukan transaksi T apabila concurrency control manager memberikan grant (hak istimewa) lock yang diminta.
  • Two Phase Lock Protokol
         Protocol ini menginginkan bahwa setiap transaksi yang akan menjalankan penguncian dan melepaskan penguncian harus melalui dua fase atau tahapan, yaitu:
  1. Fase Pertumbuhan (Growing Phase). Sebuah transaksi dapat melakukan sejumlah penguncian tetapi belum satupun melepaskan pengunciannya.
  2. Fase Pelepasan (Shrinking Phase). Sebuah transaksi dapat melepaskan sejumlah penguncian , tetapi belum melakukan penguncian yang baru.
        Pada awalnya, sebuah transaksi akan berada dalam fase pertumbuhan. Transaksi tersebut akan melakukan penguncian sebanyak yang dibutuhkan. Ketika transaksi mulai melepaskan sebuah penguncian, ia akan mulai memasuki fase pelepasan, tanpa ada permintaan penguncian berikutnya.

Schedule
       Schedule adalah sebuah urutan dari operasi-operasi oleh satu set transaksi yang jalan bersamaan yang menjaga urutan operasi pada setiap transaksi individual. Sebuah transaksi mencakup sebuah urutan operasi yang terdiri dari tindakan baca dan/atau tulis pada database, diikuti oleh sebuah tindakan commit atau abort.
     Sebuah schedule S terdiri dari sebuah urutan operasi dari sekumpulan n transaksi T1, T2, … Tn, bergantung pada constraint yang dilindungi oleh urutan operasi untuk setiap transaksi pada schedule tersebut. Jadi, untuk setiap transaksi Ti pada schedule S, urutan operasi pada Ti harus sama dengan schedule S. Serial Schedule adalah sebuah schedule di mana operasi dari setiap transaksi dijalankan secara berurutan tanpa adanya tarnsaksi yang mengganggu transaksi lainnya. NonSerial Schedule adalah sebuah schedule di mana operasi-operasi dari satu set concurrent transactions mengalami interleaved. Pada sebuah serial schedule, transaksi dijalankan pada serial order. Contohnya, jika kita mempunyai dua transaksi T1 dan T2, serial ordernya akan menjadi T1 diikuti oleh T2, atau T2 diikuti oleh T1. Lalu, pada eksekusi serial tidak ada interferensi antara transaksi, karena hanya satu transaksi yang berjalan pada satu waktu. Tujuan serializibility adalah untuk menemukan non serial schedule yang mengijinkan transaksi untuk berjalan secara bersamaan tanpa mengganggu satu sama lain, dan kemudian memproduksi sebuah state database yang dapat diproduksi oleh sebuah eksekusi serial. Jika sebuah set transaksi berjalan secara bersamaan, bisa dikatakan bahwa schedule (nonserial) adalah benar jika memproduksi hasil yang sama seperti beberapa eksekusi serial lainnya. Schedule seperti itu disebut serializable. Untuk mencegah inkonsistensi dari transaksi yang mengganggu satu sama lain, penting untuk menjamin serializability dari transaksi yang jalan bersamaan.
       Pada serializability, urutan operasi baca dan tulis itu penting. Berikut ini hal – hal yang perlu diperhatikan:
  1. Jika dua transaksi hanya membaca satu item data yang sama, dua transaksi tersebut tidak mengalami konflik dan urutan menjadi tidak penting.
  2. Jika dua transaksi melakukan operasi membaca ataupun menulis pada item data yang berbeda, dua transaksi tersebut tidak mengalami konflik dan urutan menjadi tidak penting.
  3. Jika satu transaksi menulis sebuah item data dan transaksi lain baik membaca ataupun menulis pada item data yang sama, maka urutan eksekusi itu menjadi penting.

Protokol Transaksi Konkuren dan Aturan ACID

       Menyambung artikel sebelumnya yakni mengenai Manajemen Transaksi. Nah, disini kita akan mengenal beberapa istilah yang ada dalam manajemen transaksi. Diantaranya yaitu Protokol Transaksi Konkuren, Recoverability, Serializability dll. Yuk langsung saja, yang pertama akan kita bahas adalah mengenai Protokol Transaksi Konkuren dan transaksi database serta aturan ACID.

Protokol Transaksi Konkuren

      Protokol Transaksi Konkuren "Concurrency control" merupakan proses pengaturan ooperasi yang simultan pada database tanpa menyebabkan saling mempengaruhi antara satu dengan yang lain. Akses konkuren tidak akan bermasalah jika user hanya melakukan pembacaan data saja, gangguan akan terjadi jika dua atau lebih user mengakses database secara simultan dan sedikitnya melakukan suatu perubahan (update), maka dapat menyebabkan ketidak-konsistenan (inconsistencies).
Terdapat empat masalah potensial yang disebabkan oleh concurrency, yaitu:
  1. Lost update problemLost update problem  adalah suatu masalah yang timbul akibat dihiraukannya informasi pada saat ada update dari operasi lain yang hampir bersamaan waktunya.
  2. Inconsistent retrievals. Inconsistent retrievals adalah permasalahan mengenai informasi update suatu operasi yang belum didapatkan oleh operasi lain saat operasi tersebut berjalan.
  3. Serial equivalenceSerial equivalence adalah kriteria untuk mengkoreksi eksekusi secara bersamaan yang bertujuan untuk menghindari adanya lost update problems dan inconsistent retrievals.
  4. Conflicting operations. Conflicting operations adalah adanya konflik antara dua atau lebih operasi yang efeknya saling bertentangan.
     Serial equivalence sering digunakan sebagai suatu kriteria protokol concurrency control. Protokolnya berusaha untuk menjadikan transaksi sebagai suatu serial saat mengakses obyek. Pada dasarnya, kontrol konkurensi dapat dicapai dengan memaksa klien menunggu klien lain menyelesaikan operasinya atau dengan merestart transaksi klien setelah terdeteksi adanya konflik, atau kombinasi dari keduanya.

Transaksi Database dan Aturan ACID
     Pengertian Transaksi itu sendiri adalah unit eksekusi program yang mengakses dan mungkin mengubah beberapa item data. Dalam Konsep transaksi di database harus di penuhi empat sifat database agar integritas database tetap terjaga. Adapun keempat sifat tersebut adalah :
  • Atomicity : Setiap transaksi harus dijamin untuk dapat sukses dalam melakukan aksinya atau jika gagal , maka tidak berpengaruh apapun terhadap database.
  • Consistency : Setiap transaksi adalah sebuah aksi kombinasi secara logikal dari sebuah state database yang konsisten ke state yang lain dengan tetap menjaga kekonsisten-an database tersebut.
  • Isolation : Meskipun ada beberapa transaksi yang berlangsung bersamaan, masing-masing transaksi tidak boleh mengetahui transaksi lain yang sedang berlangsung. Hasil transaksi sementara harus disembunyikan dari transaksi lain yang sedang berlangsung . (level transparansi transaksi dapat di set).
  • Durability : Setelah sebuah transaksi sukses dilakukan, perubahan-perubahan yang dibuatnya terhadap database bersifat permanen, bahkan jika terjadi kegagalan sistem sekalipun.

Sabtu, 19 Oktober 2013

Manajemen Transaksi

Sebelum kita membahas tentang manajemen transaksi, kita harus tahu sulu apa yang dimaksud dengan transaksi dalam ilmu sistem basis data. Dalam basis data transaksi diartikan sebagai suatu proses penggunaan resource (database, JMS, dll) pada suatu aplikasi.
Sedangkan Manajemen Transaksi (transaction management) adalah pengaturan transaksi-transaksi yang digunakan/diakses oleh suatu aplikasi/sistem. Transaksi-transaksi ini perlu diatur untuk mempertahankan ACID (atomicity, consistency, isolation, and durability).
Pemahaman mengenai strategi-strategi manajemen transaksi dibutuhkan untuk mempertahankan konsistensi resource yang digunakan. Kesalahan dalam memilih strategi manajemen transaksi tentu saja akan membuat proses bisnis yang diharapkan tidak berjalan dengan semestinya. Mulai dari kegagalan eksekusi hingga integritas database yang rendah.

Beberapa hal yang perlu dimengerti sebelumnya memahami manajemen transaksi ini adalah :
  •     Konsep ACID (Atomicity, Concistency, Isolation, Durability)
  •     JTA (Java Transaction API) dan JTS (Java Transaction Service)

Local Transaction Model
Pada Local Transaction Model, manajemen transaksi diatur oleh DBMS. Developer yang mengatur koneksi. Transaksi secara otomatis diatur oleh DBMS karena adanya variabel auto commit yang secara default di-set dengan nilai "true". Maksudnya adalah setiap kali transaksi terjadi, maka secara otomatis transaksi itu di-commit.
Jika hanya satu eksekusi dalam satu transaksi yang terjadi, maka ini otomatisasi ini mempermudah. Tapi jika dalam satu transaksi terjadi lebih dari satu eksekusi pengubahan resource (Create, Update, Delete) dan antar eksekusi itu memiliki hubungan logik (misalkan penambahan record pada tabel penjualan harus didahului oleh penambahan record pada tabel pemesanan), maka yang terjadi adalah jika eksekusi SQL pertama sukses namun eksekusi SQL kedua gagal, maka yang di-rollback hanyalah eksekusi SQL kedua. Eksekusi SQL yang pertama akan lolos (commited). Ini tidak sesuai dengan konsep ACID. Proses tidak atomic dan resource tidak konsisten.

Programmatic Transaction Model

Pada Programmatic Transaction Model, developer mengatur transaksi, bukan koneksi. Hal ini kebalikan dari Local Transaction Model. Jadi developer bertanggung jawab untuk memulai (begin), mengakhiri (commit), dan rollback suatu transaksi.
Kekurangan Programmatic Transaction Model yang pertama adalah kenyataan bahwa dengan tipe manajemen transaksi ini developer menjadi harus memberikan perhatian ekstra pada exception handling. Mengapa? Karena error yang seringkali terjadi (terutama jika developer lupa membuat "commit") adalah runtime exception yang tidak terdeteksi ketika melakukan proses pengetesan aplikasi (testing).

Jumat, 18 Oktober 2013

Structure Query Language

Postingan kali ini saya akan membahas tentang Structure Query Language (SQL).Apa itu SQL ? SQL adalah sekumpulan perintah khusus yang digunakan untuk mengakses data dalam database relasional. SQL merupakan sebuah bahasa komputer yang mengikuti standar ANSI (American Nasional Standard Institute) yang digunakan dalam manajemen database relasional. Dengan SQL, kita dapat mengakses database, menjalankan query untuk mengambil data dari database, menambahkan data ke database, menghapus data di dalam database, dan mengubah data di dalam database. Saat ini hampir semua server database yang ada mendukung SQL untuk melakukan manajemen datanya.

Terdapat 2 jenis perintah SQL, yaitu DDL dan DML


1. DDL atau Data Definition Language

DDL merupakan perintah SQL yang berhubungan dengan pendefinisian suatu struktur database, dalam hal ini database dan table. Perintah SQL yang termasuk dalam DDL antara lain :
  • CREATE
  • ALTER
  • RENAME
  • DROP
2. DML atau Data Manipulation Language

DML merupakan perintah SQL yang berhubungan dengan manipulasi atau pengolahan data atau record dalam table. Perintah SQL yang termasuk dalam DML antara lain :
  • SELECT
  • INSERT
  • UPDATE
  • DELETE

Create Database
Digunakan untuk membuat database baru.

Syntax dasar:

CREATE DATABASE database_nama

Contoh:

CREATE DATABASE databaseku


Create Table

Digunakan untuk membuat tabel data baru dalam sebuah database.

Syntax dasar:

CREATE TABLE

(

Column_name1 table_nama data_type

Column_name2 table_nama data_type

Column_name3 table_nama data_type

)

Contoh:

CREATE TABLE bukutamu

(

Id int,

Nama varchar (255),

Email varchar(50),

Kota varchar(255)

)

 
Drop Database


Digunakan untuk menghapus database.

Syntax dasar :

DROP DATABASE database_name



Alter Table

Digunaka untuk menambah, menghapus, atau mengubah kolom (field) pada tabel yang sudah ada.

Syntax untuk menambah kolom :

ALTER TABLE table_name

ADD column_name datatype



ALTER TABLE table_name

DROP column_name datatype



Update

Digunakan untuk mengubah/memperbarui data di tabel database.

Syntax dasar:

UPDATE table_name

SET column1=value,column2=value, . . .

WHERE some_column=some_value

Contoh :

UPDATE bukutamu

SET email=miftakhul@yahoo.com’, kota=’Demak’

WHERE



Insert Into

Digunakan untuk menambahkan data baru di tabel database.

Syntax dasar :

INSERT INTO table_name

VALUES (value1,value2,value3, . . .)

Atau

INSERT INTO table_name (column1,column2,column3, . . .)

VALUES (value1,value2,value3, . . .)

Contoh 1:

INSERT INTO bukutamu

VALUES (1,’Miftakhul’,’miftakhul@mail.com’,’Demak’)

Contoh 2:

INSERT INTO bukutamu (id,nama,email,kota)

VALUES (1,’Miftakhul’,’miftakhul@mail.com’,’Demak’)



Delete

Digunakan untuk menghapus data di table database. Tambahkan perintah Where untuk memfilter data-data tertentu yang akan dihapus. Jika tanpa perintah Where, maka seluruh data dalam tabel akan terhapus.

Syntax dasar :

DELETE FROM table_name

WHERE some_column=some_value

Contoh:

DELETE FROM bukutamu

WHERE id=1



 Select
Digunakan untuk memilih data dari table database.

Syntax dasar:

SELECT column_name(s)

FROM table_name

Atau

SELECT * FROM table_name

Contoh 1:

SELECT nama,email FROM bukutamu

Contoh 2:

SELECT * FROM bukutamu

Senin, 07 Oktober 2013

Aljabar Relasional

Selamat datang, ini adalah postingan pertama saya gan. Jadi harap maklum yaa :D
        Dalam postingan ini, saya ingin sedikit membahas tentang aljabar relasional. Sebelumnya kita harus tau dulu dong, apa sih yang disebut aljabar relasional. Nah Aljabar relasional merupakan bahasa database prosedural. Selain itu juga merupakan kumpulan operasi terhadap tabel, dimana setiap operasi menggunakan satu atau lebih tabel untuk menghasilkan satu tabel yang baru.

Terdapat  lima operasi dasar dalam aljabar relasional, yaitu:
1.  Selection ( σ )
2.  Projection ( π )
3.  Cartesian – product ( X, juga disebut sebagai cross product )
4.  Union ( ∪ )
5.  Set – difference ( - )
6.  Rename ( ρ )

Selain operasi-operasi dasar tersebut, terdapat beberapa operasi tambahan yaitu :
1.  Operasi set –interface
2. Operasi natural join
3. Operasi theta join
4. Operasi devision

       Operasi-operasi select, project dan rename disebut operasi unary, karena operasi-operasi tersebut hanya memerlukan satu relasi. Tiga operasi lainnya memerlukan sepasang relasi, disebut operasi binary.

•  Operasi Selection  (σ)
   Operasi select berfungsi untuk menyeleksi tuple-tuple yang memenuhi predikat yang diberikan dari sebuah tabel relasi. Operasi select menyeleksi tuple-tuple yang memenuhi predikat yang diberikan. Digunakan symbol sigma (σ) untuk menunjukkan operasi select.Predikat muncul sebagai subcript dari σ. Argumen relasi diberikan dalam kurung yang mengikuti σ.Contoh penggunaan operasi select :
          σ nama_cabang= cabang5(ms_cabang)

•  Operasi Projection (π)
   Operasi project berfungsi untuk memilih nilai atribut-atribut tertentu saja dari sebuah tabel relasi. Operasi project disimbolkan dengan symbol phi (π). Nama-nama atribut yang diinginkan tampil ditulis sebagai subcript π.Contoh penggunaan operasi project :             
          Π kode_kota,kode_propinsi(ms_kota)

•  Operasi Cartesian 
   Operasi cartesian product berfungsi untuk mengkombinasikan informasi yang ada dalam 2 tabel relasi atau lebih  dan menghasilkan sebuah tabel relasi yang baru. Contoh operasi Cartesian :
         Πx (σ c ᴧ k ᴧ p ( Ms_cabang x Ms_kota x Ms_propinsi)) --> tabel relasi baru

•  Operasi Union (∪)
   A ∪ B adalah relasi dengan heading (atribut) yang sama untuk setiap A dan B, dimana terdiri dari himpunan semua tuples yang terdapat pada A atau B atau kedua-duanya.Operasi union berfungsi untuk mendapatkan gabungan nilai atribut dari sebuah tabel relasi dengan nilai atribut dari tabel relasi lainnya. Contoh penggunaan operasi union :
         Π Nama_cabang(ms_cabang) ∪ ΠNama_cabang(MS_cabanga)

•  Operasi set – difference (-)
   Operasi set difference berfungsi untuk mendapatkan nilai yang ada dalam sebuah tabel relasi, tapi tidak ada dalam tabel relasi lainnya. A MINUS B adalah relasi dengan heading (atribut) yang sama untuk setiap A dan B, dimana terdiri dari himpunan semua tuples yang terdapat pada A, tetapi tidak terdapat pada B. Contoh operasi set-difference :
         Π Nama_cabang(ms_cabang) –Nama_cabang(ms_cabanga)

•  Operasi Rename (ρ)

   Dalam operasi himpunan Cross – Product, bisa menimbulkan terjadinya Konflik Penamaan, karena Cross – Product bisa menghasilkan suatu relasi dari 2 relasi dengan skema yang sama, sehingga skema hasil akan muncul field dengan nama yang sama.Operator Renaming (r) digunakan untuk menghindari terjadinya Konflik Penamaan tersebut.