School of Information Systems

View Serializability dan Conflict Serializability

View Serializability adalah proses untuk mengecek apakah suatu schedule bisa di serialisasikan atau tidak. Transactions adalah sekumpulan instruksi yang menjalankan operasi pada database. Ketika beberapa transaksi dijalankan secara serentak, maka dibutuhkan urutan untuk menjalankan operasi karena hanya satu operasi saja yang dijalankan dalam satu waktu. Urutan dari operasi inilah yang dinamakan schedule.

Untuk mengecek suatu schedule bisa dilihat secara serialisasi (view serializable), kita harus mengecek apakah schedule tadi itu bernilai setara atau ekuivalen (view equivalent). Suatu schedule dapat dikatakan sebagai jadwal serial (serial schedule) jika sebuah transaksi dimulai hanya ketika transaksi yang sebelumnya sudah selesai. Hal ini berarti tidak ada schedule yang tumpang tindih atau berjalan bersamaan, sehingga tidak terjadi keambiguan dan mengurangi kemungkinan didapatkannya output yang tidak sesuai. Jika kita dapat membuktikan schedule adalah view equivalent dengan jadwal serialnya, maka jadwal tersebut dapat dikatakan sebagai view serializable. View serializability diperlukan karena tidak mungkin suatu jadwal serial meninggalkan database dalam keadaan inkonsisten, karena tidak adanya eksekusi transaksi bersamaan.

Non-Serial (S1)

Serial (S2)

T1

T2 T1 T2

A(x)

A(x)

B(x)

B(x)

A(x) A(y)

B(x) B(y) A(x)

A(y)

B(x)
B(y)

A(y)

A(y)

B(y)

B(y)

A(x)

View equivalent terdiri dari 3 operasi. Pertama, operasi initial read yang artinya initial read dari setiap item data dalam sebuah transaksi harus sesuai dengan kedua jadwal yang berbeda. Contohnya, transaksi T1 membaca sebuah data item X sebelum transaksi T2 pada jadwal S1, kemudian pada jadwal S2, T1 harusnya membaca X sebelum T2. Kedua, operasi final write yang artinya pada setiap item data harus sesuai dengan kedua jadwal. Contohnya, sebuah item data X adalah yang terakhir ditulis(written) oleh transaksi T1 dalam schedule S1 kemudian pada S2, yang terakhir ditulis pada X seharusnya dilakukan oleh transaksi T1. Ketiga operasi update read, jika dalam schedule S1, transaksi T1 membaca data item yang di update oleh T2 kemudian dalam schedule S2, T1 harus membaca value setelah T2 melakukan operasi write(menulis) pada item data yang sama. Contohnya pada schedule S1, T1 melakukan operasi read(membaca) pada X setelah operasi write(menulis) di X oleh T2. Kemudian pada S2, T1 seharusnya membaca X setelah T2 melakukan operasi write(menulis) pada X.

Mengecek pada tabel diatas, kita coba buktikan apakah kedua schedule diatas memenuhi 3 kondisi tadi. Pertama kita lakukan pengecekan apakah sudah sesuai dengan kaidah initial read. Pada schedule S1, yang pertama membaca item data X adalah T1. Sekarang kita lihat untuk Y. Pada schedule S1, transaksi T1 adalah yang pertama membaca item data Y. Pada S2, T1 juga yang membaca pertama kali pada Y. Berarti ini memenuhi kondisi initial read. Kedua kita lakukan pengecekan apakah sudah sesuai kondisi final write. Pada S1, transaksi T2 membaca value dari X, yang ditulis T1. Pada S2, transaksi yang sama T2 membaca X setelah T1 menulisnya. Pada S1, transaksi T2 membaca value Y,  yang ditulis T1. Pada S2, transaksi yang sama T2 membaca value Y setelah di update oleh T1. Berarti kedua schedule tadi memenuhi syarat update read. Ketiga kita cek apakah sudah memenuhi kondisi update read atau belum. Pada S1, transaksi T2 membaca value dari X yang ditulis oleh T1. Pada S1, transaksi T2 membaca value dari Y yang ditulis oleh T1. Pada S2, transaksi yang sama T2 membaca value dari Y setelah data di update oleh T1. Kesimpulannya, karena ketiga kondisi tadi yaitu initial read, final write, update read terpenuhi, maka schedule S1 dan S2 adalah view equivalent(dapat dilihat secara ekuivalen). Bisa juga kita sebut bahwa S2 adalah jadwal serial(serial schedule) dari S1, maka dari itu dapat disimpulkan juga bahwa schedule S1 adalah view serializable(jadwal dapat dilihat secara serialisasi) schedule.

Pada serial schedules(jadwal serial), yang pertama adalah pembacaan data secara bersamaan tidak diperbolehkan. Ini berarti semua transaksi dapat dimulai ketika transaksi sebelumnya sudah selesai(transaksi berjalan bergantian tidak boleh timpang tindih/bersamaan). Kedua, serial schedules menggunakan lebih sedikit resource dan mengurangi kinerja CPU. Ketiga, serial schedules kurang efisien dibanding serializable schedules karena kedua alasan diatas.

Pada serializable schedules(jadwal yang dapat di serialisasikan), yang pertama pembacaan data secara bersamaan diperbolehkan. Hal ini berarti, beberapa transaksi bisa dieksekusi secara bersamaan. Kedua, serializable schedules meningkatkan resource dan kinerja CPU. Ketiga, serializable schedules lebih baik dibanding serial schedules karena kedua alasan diatas.

Conflict serializability adalah sebuah tipe serializability dimana dapat digunakan untuk mengecek jika sebuah schedule non serial adalah  sebuah conflict serializable atau tidak.Sebuah schedule disebut conflict serializable jika kita dapat mengubahnya menjadi serial schedule setelah kita menukar operasinya yang tidak saling berkonflik. Dua buah operasi disebut berkonflik jika mereka memenuhi tiga syarat yaitu, pertama kedua operasi berasal dari transaction yang berbeda, lalu kedua operasi tersebut sedang mengolah data item yang sama dan setidaknya salah satu operasi sedang mengerjakan operasi write.

References:

https://beginnersbook.com/2018/12/dbms-view-serializability/

https://beginnersbook.com/2018/12/dbms-schedules/

https://beginnersbook.com/2018/12/dbms-conflict-serializability/

Evaristus Didik M