Database System 8 Hash-Based Indexing Dahlia Widhyaestoeti, S.Kom Powered by www.redoffice.com
Pustaka Sistem Manajemen Database Edisi ketiga, Raghu Ramakrishnan & Johannes Gehrke, McGrawHill 3
Hash-Based Indexing Hash-Based Indexing adalah organisasi file yang baik digunakan pada equality selection. Pemikiran dasarnya adalah menggunakan fungsi Hashing, yang memetakan nilai dalam field search ke dalam rentang dari bucket number untuk menemukan halaman di mana terdapat entri data yang di inginkan. Skema dalam Hash-Based Indexing : Static Hashing Extendible Hashing Linear Hashing
Static Hashing h(key) mod N key h 0 N-1 Primary bucket pages Overflow pages Halaman yang berisi data dapat dianggap sebagai kumpulan bucket, dengan sebuah halaman primer dan mungkin sebuah halaman overflow tambahan per bucket. Sebuah file terdiri dari bucket 0 sampai N-1, dengan satu halaman primer per bucket pada awalnya. Bucket berisi entri data. Jika kita mempunyai N bucket, yang diberi nomor 0 sampai N-1, fungsi hash h dari bentuk h(nilai) = (a*nilai+b) berjalan dengan baik dalam praktiknya (bucket teridentifikasi adalah h (nilai) mod N). Konstanta a dan b dapat dipilih untuk men-tune fungsi hash.
Extendible Hashing Dengan mempertimbangkan file Static Hashing: Jika harus menyisipkan entri baru ke dalam bucket yang penuh, maka perlu menambah halaman overflow. Jika tidak ingin menambahkan halaman overflow, solusinya adalah mereorganisasi file pada titik ini dengan menggandakan jumlah bucket dan meredistribusi entri pada pada kumpulan bucket baru. Solusi menimbulkan masalah : Seluruh file harus dibaca Dua kali sebanyak halaman yang harus ditulis untuk melakukan reorganisasi. Cara mengatasi : Gunakan direktori dari pointer pada bucket Gandakan ukuran dari jumlah bucket dengan hanya menggandakan direktori dan memisahkan hanya bucket yang overflow
Extendible Hashing Direktori terdiri dari array yang besarnya 4, yang masingmasing elemennya menjadi pointer pada bucket. Untuk menemukan entri data r, aplikasikan fungsi hash pada field search (Global Depth) dan mengambil bits terakhir dari representasi biner. Jika h(r) = 5 = 101, berada pada bucket 01. Untuk menyisipkan entri data, lakukan pencarian untuk menemukan bucket yang tepat. Jika bucket penuh maka split (dibagi alokasikan pada halaman baru) LOCAL DEPTH GLOBAL DEPTH 0 0 0 1 1 0 1 1 D I R E C T O R Y 4 * 1 * 3 * 1 6 * 1 * 5 * 1 * 1 0 * 1 5 * 7 * 1 9 * 1 3 * B u c k e t A Data entri r Maka h(r)=3 B u c k e t B B u c k e t C B u c k e t D D A T A P A G E S
Extendible Hashing Contoh : sisipkan 13* dan 0* LOCAL DEPTH GLOBAL DEPTH 3 * 1 6 * B u c k e t A LOCAL DEPTH GLOBAL DEPTH 3 3 * 1 6 * B u c k e t A 0 0 0 1 1 0 1 1 1 * 5 * 1 * 1 3 * 1 0 * B u c k e t B B u c k e t C 0 0 0 0 0 1 0 1 0 0 1 1 3 1 * 5 * 1 * 1 3 * 1 0 * B u c k e t B B u c k e t C D I R E C T O R Y 1 5 * 7 * 1 9 * B u c k e t D 1 0 0 1 0 1 1 1 0 1 5 * 7 * 1 9 * B u c k e t D 4 * 1 * 0 * B u c k e t A ( ` s p l i t i m a g e ' o f B u c k e t A ) 1 1 1 D I R E C T O R Y 3 4 * 1 * 0 * B u c k e t A ( ` s p l i t i m a g e ' o f B u c k e t A )
Extendible Hashing Hal penting yang muncul adalah Apakah memisahkan bucket mengharuskan penggandaan direktori? LOCAL DEPTH GLOBAL DEPTH 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 3 D I R E C T O R Y 3 3 1 * 9 * 1 0 * 1 5 * 7 * 3 3 * 1 9 * 4 * 1 * 0 * 3 1 6 * 5 * 1 * 1 3 * B u c k e t A B u c k e t B B u c k e t C B u c k e t D B u c k e t A ( ` s p l i t i m a g e ' o f B u c k e t A ) B u c k e t B ( ` s p l i t i m a g e ' o f B u c k e t B ) Jika kita meyisipkan 9*? Bucket B penuh Pisahkan Bucket dan gunakan elemen direktori 1 dan 101 Bucket Split tidak perlu menggandakan direktori Jika semua bucket telah terisi penuh, maka baru gandakan direktori.
Linear Hashing Adalah teknik dinamik hashing Mengatur penyisipan dan penghapusan Berbeda dengan static hashing, Linear Hashing tidak memerlukan direktori Fleksibilitas dengan waktu dari bucket split Skema menggunakan famili dari fungsi hash h 0,h 1,h,.. dengan sifat bahwa setiap rentang fungsi sebesar kali rentang sebelumnya. Jika h memetakan entri data ke dalam satu M bucket, maka h i+1 memetakan entri data ke dalam salah satu dari M bucket. Misal sejumlah N dari bucket sebesar 3, h 0 adalah h mod 3 (rentang 0 sampai 31).
Linear Hashing Bucket untuk di split Next Bucket yang ada pada permulaan putaran : Ini adalah rentang h level Split bucket dalam putaran ini Jika h level (nilai search key) adalah rentang ini, harus menggunakan h level+1 (nilai search key) untuk memutuskan jika entri adalah dalam bucket split image. Bucket 'split image': tercipta (melalui mensplit bucket lain) dalam putaran ini.
Linear Hashing h 1 0 1 h 0 01 Level=0, N=4 PRIMARY Next=0 3* 44* 36* 9* 5* 5* with h(r)=5 Counter level digunakan untuk mengindikasi jumlah putaran terbaru dan diawali dengan 0. Bucket yang akan dipisahkan ditandai dengan Next dan pada awalnya adalah bucket 0 (bucket pertama). Jumlah bucket pada permulaan putaran 0, ditandai N 0, menjadi N. 010 10 14* 18* 10* 30* Primary bucket page 011 11 31* 35* 7* 11* Informasi ini hanya untuk ilustrasi Isi aktual file linear hashed
Linear Hashing h 1 0 1 010 h 0 01 10 Level=0 3* PRIMARY Next=1 9* 5* 5* 14* 18* 10* 30* OVERFLOW Penyisipan Entri 43* Membentuk halaman overflow. Kapanpun pemisahan terpicu, bucket Next akan dipisahkan, dan fungsi hash h level+1 mendistribusi entri diantara bucket ini. Setelah memisahkan bucket, nilai next ditambah 1. 011 11 31* 35* 7* 11* 43* 1 44* 36*
Linear Hashing Level=0 h 1 h 0 PRIMARY OVERFLOW 0 1 01 3* Next=1 9* 5* 5* Sisipkan record r dengan h(r) = 37 010 10 14* 18* 10* 30* 011 11 31* 35* 7* 11* 43* 1 44* 36*
Linear Hashing h 1 h 0 Level=0 PRIMARY OVERFLOW 0 3* 1 010 01 10 9* 5* Next= 14* 18* 10* 30* Sisipkan record r dengan h(r) = 9 011 1 11 31* 35* 7* 11* 43* 44* 36* 101 01 5* 37* 9*
Linear Hashing h 1 h 0 Level=0 PRIMARY OVERFLOW 0 1 010 011 01 10 11 3* 9* 5* 66* 18* 10* 34* Next=3 31* 35* 7* 11* 43* Sisipkan record r dengan h(r) =, 66 dan 34 1 101 01 44* 36* 5* 37* 9* Sisipkan record r dengan h(r) = 50? 110 10 14* 30* *
Linear Hashing h 1 0 h 0 Next=0 PRIMARY 3* OVERFLOW 1 01 9* 5* 010 10 66* 18* 10* 34* 50* 011 11 43* 35* 11* 1 44* 36* 101 11 5* 37* 9* 110 10 14* 30* * 111 11 31* 7*
Thank you!