pstaktif F Analisis optimisasi formula distributed query dalam basis data relasional

37 Penulis mencoba membahas tentang operasi join dari sebuah contoh kasus sederhana di bawah ini: SELECT FROM pst_ke1

P, pstaktif F

WHERE P. no_tsp = F. nippa Gambar 10 : Contoh Perintah Join Query ini dapat dinyatakan sebagai operasi P ⋈ F dan perintahnya sangat sederhana, meskipun join dapat didefinisikan sebagai cross product yang diikuti oleh seleksi dan proyeksi, join lebih sering muncul dalam praktek dibandingkan dengan cross product murni. Cross product biasanya lebih besar daripada hasil join. Dalam hal ini sangat penting untuk mengimplementasikan join tanpa menampilkan cross product. Untuk mengimplementasikan join dapat digunakan algoritma simple-nested-loops-join dan block-nested-loops-join, yang pada dasarnya menghitung semua record dalam cross product dan membuang record yang tidak memenuhi syarat join. Selanjutnya menghindari perhitungan cross product dengan menggunakan partisi. Secara intuitif jika syarat join terdiri dari equality, maka record dalam dua relasi dapat dianggap tercakup dalam partisi, sehingga hanya record yang berada dalam partisi yang sama yang dapat join satu sama lain atau record dalam partisi tersebut berisi nilai yang sama dalam kolom join. Indeks nested-loops-join men-scan salah satu relasi, untuk masing- masing record didalamnya, dengan menggunakan indeks pada kolom join dari relasi kedua untuk menemukan record yang berada dalam partisi yang sama. Jadi hanya subset relasi kedua yang dibandingkan dengan record tertentu dari relasi pertama, seluruh cross-product tidak dihitung. Penulis mencoba membahas join dari dua relasi P dan F, dengan syarat join P i = F j, menggunakan tanda posisional. Diasumsikan M halaman dalam P dengan P P page P record per halaman M, dan N halaman dalam F dengan P F page F record per halaman dalam N, dimana P adalah tabel relasi pst_ke1 dan F adalah tabel relasi pstaktif. 38

4.2.3.1 Nested-Loops-Join

Algoritma yang paling sederhana adalah record pada saat dievaluasi nested loops. Algoritma men-scan relasi P tabel relasi pertama, untuk tiap record p ∈P, kemudian men-scan semua relasi kedua dalam F . Biaya men-scan P adalah M IO, dimana M adalah jumlah halaman dalam P, kemudian men-scan F sebanyak P P M kali, dan tiap scanning biayanya N IO, dimana N adalah jumlah halaman dalam F Raghu 2003, jadi biaya totalnya adalah : M + P P.M.N .......................................4.1. Dimana : p P : adalah jumlah record per halaman dari M M: jumlah halaman dari relasi P N : jumlah halaman dari relasi F Algoritmanya dapat dinyatakan sebagai berikut : For each record p ∈ P do For each record f ∈ F do if p i == f j then add p,f to result Gambar 11 : Algoritma Simple-Nested-Loops-Join Raghu 2003 Algoritma Simple-Nested-Loops-Join tidak memanfaatkan fasilitas buffer. Andaikan memilih P menjadi pst_ke1 dan F menjadi pstaktif , maka nilai M adalah 38.730 halaman dan p P adalah 100, kemudian nilai N adalah 45.242 P F adalah 80. Menurut Ramakrishna Raghu Gehrke Johanes 2003 merujuk ke rumus 4.1., biaya simple-nested-loops-join adalah : 38.730 + 100 38.730 45.242 halaman IO ditambah biaya penulisan hasil yang dalam hal ini diabaikan, maka besarnya biaya paling sedikit : 38.730 + 100 38.730 45.242 = 175.222.304.730 = 175.222.340.730 halaman IO Biaya tersebut sangat mengejutkan, apabila biaya IO 10 ms setara dengan 0,001666667 detik atau 1360000 jam = 0,0000028 jam per halaman pada perangkat keras terbaru, maka join ini akan memerlukan waktu : 39 175.222.340.730 0,001666667 = 292.037.293 detik 292.037.293 60 = 4.867.288,216 menit 4.867.288,216 60 = 81121,470 jam 81.121,470 24 = 3380,061 hari 3.380,061261 365 = 9,260 tahun Biaya tersebut sangat tidak realistik, mungkin dapat diperbaiki dengan menggunakan join-page-at-a-time. Untuk tiap halaman P, kita dapat mengambil halaman F dan mengisi record p,f untuk semua record yang memenuhi syarat p ∈ P halaman dan f ∈ F halaman. Atas dasar tersebut biaya M untuk men-scan P, seperti sebelumnya, akan tetapi F hanya di-scan M kali. Jadi biaya total adalah : M + M N, maka perbaikan page-at-a-time memberikan perkembangan faktor P

F. Dalam contoh join dari relasi pst_ke1 dan pstaktif,