indexing dan hashing

Embed Size (px)

Citation preview

NonUnique Search Keys Alternatif: Buckets di blok terpisah (ide yang buruk)Daftar pointer tuple dengan setiap tomboloverhead ruang rendah, tanpa biaya tambahan untuk querykode ekstra untuk menangani baca / update dari daftar panjangPenghapusan tupel bisa mahal jika ada banyak duplikat pada tombol pencarian Membuat kunci pencarian yang unik dengan menambahkan sebuah recordidentifierbiaya overhead penyimpanan ekstra untuk kuncikode Simpler untuk penyisipan / penghapusanBanyak digunakan

Masalah lain di Indexing Indeks covering Tambahkan atribut ekstra untuk indeks sehingga (beberapa) query dapat menghindari mengambil catatan sebenarnya.Terutama berguna untuk indeks sekunderDapat menyimpan atribut ekstra hanya pada daun Relokasi Rekam dan indeks sekunder Jika record bergerak, semua indeks sekunder yang merekam pointer toko harus diperbarui Node perpecahan di B + organisasi berkas pohon menjadi sangat mahal Solusi: menggunakan kunci pencarian primaryindex bukan catatan penunjuk dalam indeks sekunder.Ekstra traversal dari indeks utama untuk menemukan recordBiaya yang lebih tinggi untuk permintaan, tapi simpul perpecahan yang murahTambahkan recordId jika primaryindex kunci pencarian adalah nonunique.

HashingHashing Statis Buckets adalah unit penyimpanan yang mengandung satu atau lebih catatan (buckets biasanya blok disk). Dalam organisasi file hash kita memperoleh buckets rekor langsung dari nilai searchkey dengan menggunakan fungsi hash. Fungsi Hash h adalah fungsi dari himpunan semua nilai searchkey Kke set dari semua buckets alamat B. Fungsi Hash digunakan untuk menemukan catatan untuk akses, penyisipan serta penghapusan. Catatan dengan nilai searchkey berbeda dapat dipetakan ke buckets yang sama, dengan demikian seluruh buckets harus dicari secara berurutan untuk mencari rekor.

Contoh organisasi file hashOrganisasi file hash, menggunakan branch_name sebagai kunci.

Ada 10 buckets, biner representasi karakter i diasumsikan integer i. Fungsi hash mengembalikan jumlah representasi biner dari karakter modulo 10Misal h (Perryridge) = 5 h (Round Hill) = 3 h (Brighton) = 3

Fungsi Hash Sebuah fungsi hash yang ideal adalah seragam, yaitu, setiap kotak diberi nomor yang sama nilai searchkey dari himpunan semua nilai yang mungkin. fungsi hash Ideal adalah acak, sehingga setiap kotak akan memiliki jumlah yang sama dari catatan yang ditugaskan untuk itu terlepas dari distribusi aktual nilai searchkey dalam file. Fungsi hash Khas melakukan perhitungan pada representasi biner internal searchkey tersebut.Sebagai contoh, untuk searchkey string, representasi biner dari semua karakter dalam string dapat ditambahkan dan jumlah modulo jumlah buckets bisa dikembalikan.

Penanganan Overflows Bucket Bucket overflow dapat terjadi karena Bucket tidak cukup Skew dalam distribusi catatan. Hal ini dapat terjadi karena dua alasan:beberapa catatan memiliki nilai search-key yang samamemilih fungsi hash menghasilkan distribusi seragam dari nilai kunci Meskipun kemungkinan buckets meluap dapat dikurangi, hal itu tidak bisa dihilangkan, itu ditangani dengan menggunakan buckets meluap. Overflow chaining - buckets limpahan buckets diberikan dirantai bersama-sama dalam sebuah linked list. Skema atas disebut hashing tertutup.Sebuah alternatif, yang disebut hashing terbuka, yang tidak menggunakan buckets meluap, tidak cocok untuk aplikasi database.

Indeks hash Hashing dapat digunakan tidak hanya untuk organisasi file, tetapi juga untuk indekspenciptaan struktur. Sebuah indeks hash mengatur kunci pencarian, dengan catatan terkait pointer mereka, ke dalam struktur file hash. Tegasnya, indeks hash selalu indeks sekunderjika file itu sendiri diatur menggunakan hashing, indeks hash terpisah primer di atasnya menggunakan searchkey yang sama tidak perlu.Namun, kita menggunakan indeks hash istilah untuk menyebut kedua struktur indeks sekunder dan file terorganisir hash. Contoh:

Kekurangan Hashing Statis Dalam hashing statis, fungsi peta h searchkey nilai untuk tetap set Balamat buckets. Database tumbuh atau menyusut dengan waktu.- Jika jumlah awal buckets terlalu kecil, dan berkas tumbuh, kinerja akan menurunkan karena terlalu banyak overflows.- Jika ruang yang dialokasikan untuk pertumbuhan diantisipasi, sejumlah besar ruang akan sia-sia awalnya (dan buckets akan underfull).- Jika menyusut database lagi ruang akan sia-sia. Salah satu solusi: reorganisasi periodik file dengan fungsi hash baru- Mahal, mengganggu operasi yang normal Solusi yang lebih baik: memungkinkan jumlah buckets harus diubah secara dinamis.

Hashing Dinamis Baik untuk database yang tumbuh dan menyusut dalam ukuran Memungkinkan fungsi hash untuk dimodifikasi secara dinamis hashing Terjulur - salah satu bentuk hashing dinamis- Fungsi Hash menghasilkan nilai lebih dari berbagai macam - bilangan bulat biasanya bbit, dengan b = 32.- Pada setiap saat hanya menggunakan awalan dari fungsi hash untuk indeks ke tabel alamat buckets.- Biarkan panjang awalan akan i bit, 0 i 32.alamat Bucket ukuran tabel = 2i. Awalnya saya = 0Nilai saya tumbuh dan menyusut sebagai ukuran database tumbuh dan menyusut.- Beberapa entri di tabel alamat buckets dapat menunjukkan buckets- Dengan demikian, jumlah sebenarnya buckets adalah ij (lebih dari satu pointer ke buckets j)- mengalokasikan buckets baru z, dan mengatur ij = iz = (ij + 1)- Update paruh kedua alamat buckets entri tabel awalnya menunjuk ke j, untuk menunjuk ke z- menghapus setiap record dalam buckets dan masukkan kembali j (j atau z di)- buckets baru recompute untuk Kj dan memasukkan catatan dalam buckets (membelah lebih lanjut diperlukan jika buckets masih penuh) Jika i = ij (hanya satu pointer ke buckets j)- jika i mencapai beberapa batas b, atau terlalu banyak perpecahan terjadi dalam penyisipan ini, membuat buckets meluap-kecualikenaikan i dan dua kali ukuran tabel alamat buckets.mengganti setiap entri dalam tabel dengan dua entri yang mengarah ke buckets yang sama.recompute buckets alamat entri tabel baru untuk Kj Sekarang i> ij jadi gunakan kasus pertama di atas.

Penghapusan pada Struktur Umum Hash Extendable untuk menghapus nilai kunci,- menemukannya dalam buckets dan menghapusnya- Buckets itu sendiri bisa dihilangkan jika menjadi kosong (dengan update sesuai dengan tabel alamat buckets).- penggabungan buckets dapat dilakukan (bisa menyatu hanya dengan "Teman" buckets yang memiliki nilai yang sama dan sama ij ij -1 awalan, jika ada).- Penurunan alamat buckets ukuran tabel juga mungkin

Contoh:

Extendable Hashing vs skema lainnya Manfaat extendable hashing:- kinerja Hash tidak menurunkan dengan pertumbuhan file- overhead ruang Minimal Kekurangan extendable hashing:- Tingkat Ekstra tipuan untuk menemukan catatan yang diinginkan- tabel alamat Bucket mungkin sendiri menjadi sangat besar (lebih besar dari memori)- Mengubah ukuran tabel alamat buckets adalah operasi yang mahal hashing Linear merupakan mekanisme alternatif- Memungkinkan pertumbuhan inkremental direktori (setara dengan tabel alamat buckets)-Biaya lebih overflow

Perbandingan Ordered Indexing dan Hashing Biaya periodik re-organisasi Frekuensi Relatif insersi dan penghapusan Apakah diinginkan untuk mengoptimalkan waktu akses rata-rata dengan mengorbankan worstcase waktu akses? Jenis Diharapkan query:-Hashing umumnya lebih baik di mengambil catatan yang memiliki nilai tertentu dari kunci.-Jika query kisaran yang umum, indeks memerintahkan harus diutamakan Dalam prakteknya:-PostgreSQL mendukung indeks hash, tetapi menghambat penggunaan karena kinerja yang buruk-Oracle mendukung organisasi hash statis, tetapi indeks tidak hash-SQLServer hanya mendukung pohon B +-

Indeks bitmap Indeks bitmap adalah jenis khusus dari indeks dirancang untuk efisien query pada beberapa tombol Records pada relasi diasumsikan nomor berurutan dari, katakanlah, 0 Berlaku pada atribut yang mengambil sejumlah relatif kecil dari nilai yang berbeda bitmap merupakan array bit,

Indeks bitmap berguna untuk query pada beberapa atribut-tidak terlalu berguna untuk query atribut tunggal Pertanyaan yang dijawab menggunakan operasi bitmap-Persimpangan (dan)-Union (atau)-Komplementasi (tidak) Setiap operasi membutuhkan dua bitmap dengan ukuran yang sama dan menerapkan operasi pada bit yang sesuai untuk mendapatkan hasil bitmap Indeks Bitmap umumnya sangat kecil Penghapusan perlu ditangani dengan benar Harus menjaga bitmap untuk semua nilai, bahkan nilai null

Pelaksanaan Efisien Operasi Bitmap Bitmap yang dikemas dalam kata-kata, satu kata dan (CPU dasarinstruksi) menghitung 32 atau 64 bit sekaligus- Misal 1millionbit dapat anded dengan hanya 31.250 instruksi Nomor Penghitungan 1s dapat dilakukan dengan cepat dengan trik:- Gunakan setiap byte untuk indeks ke array precomputed dari 256 elemen masing-masing menyimpan hitungan 1s dalam representasi binerDapat menggunakan pasang byte untuk mempercepat lanjut dengan biaya memori yang lebih tinggi- Tambahkan atas penghitungan diambil

Bitmaps dapat digunakan sebagai pengganti daftar TupleID pada tingkat daunpohon B +, untuk nilai-nilai yang memiliki sejumlah besar catatan yang cocok- Berharga jika> 1/64 dari catatan memiliki nilai itu, dengan asumsi tupleid adalah 64 bit- Teknik atas menggabungkan manfaat bitmap dan indeks pohon B+-

Definisi Indeks di SQL Buat indekscreate index on ()Misalnya: create index bindex on branch(branch_name) Gunakan membuat indeks yang unik untuk secara tidak langsung menentukan dan menegakkan kondisi bahwa kunci pencarian adalah kunci kandidat adalah kunci kandidat.- Tidak benar-benar diperlukan jika SQL batasan integritas yang unik didukung Untuk mengurangi indeksdrop index Kebanyakan sistem database memungkinkan spesifikasi jenis indeks, dan clustering.

Partisi Hashing Nilai hash dibagi menjadi segmen yang bergantung pada masing-masing atribut searchkey tersebut.(A1, A2, ..., An) untuk n atribut search-key Contoh: n = 2, for customer, searchkey being(customerstreet, customercity)

searchkey valuehash value(Main, Harrison)101 111(Main, Brooklyn)101 001(Park, Palo Alto)010 010(Spring, Brooklyn)001 001(Alma, Palo Alto)110 010 Untuk menjawab pertanyaan kesetaraan pada atribut tunggal, perlu mencari beberapa buckets. Mirip berlaku ke file jaringan.

Contoh account files

Gambar 12.25

Grid File Struktur yang digunakan untuk mempercepat pengolahan beberapa pencarian umumpertanyaan kunci yang melibatkan satu atau lebih operator perbandingan. Berkas kotak memiliki grid array tunggal dan satu skala linier untuk setiap atribut searchkey. The grid array memiliki jumlah dimensi sama dengan jumlah atribut searchkey. sel Beberapa dari grid array dapat menunjukkan buckets yang sama Untuk menemukan buckets untuk nilai searchkey, cari baris dan kolom sel dengan menggunakan skala linear dan ikuti pointer

Contoh Grid file untuk account

Query pada Grid File Sebuah file pada dua atribut A dan B dapat menangani permintaan dari semua bentuk berikut dengan efisiensi wajar. (a1 a2 A)(b1 b2 B)(a1 a2 b1 A B b2),. Misalnya, untuk menjawab (a1 a2 b1 A B b2), menggunakan skala linear untuk menemukan calon sel grid array yang sesuai, dan melihat semua buckets menunjuk dari sel-sel. Selama penyisipan, jika buckets penuh, buckets baru bisa dibuat jika lebih dari satu sel poin untuk itu.- Ide mirip dengan hashing diperpanjang, tetapi pada beberapa dimensi- Jika hanya satu poin sel untuk itu, baik buckets meluap harus dibuat atau ukuran grid harus ditingkatkan skala Linear harus dipilih untuk seragam mendistribusikan catatan di sel.- Jika tidak akan ada terlalu banyak air sampai meluap. reorganisasi periodik untuk meningkatkan ukuran grid akan membantu.- Tapi reorganisasi bisa sangat mahal. Ruang overhead grid array bisa tinggi.