Çok Seviyeli Dizinleme ve B+ Trees
Basit Dizinleme Problemleri Eğer hafızadaki dizin uygun değilse: Dizini aramak yavaştır (ikili arama): Bir araştırma için 3 veye 4 ‘den daha fazla arama yapısı uygun değildir. Eklemeler ve silmeler yapıldığında disk girişleri 0(N) değerini alır. N Log(N+1) 15 anahtar 4 1000 ~10 100,000 ~17 1,000,000 ~20
Çok Seviyeli Dizinler Bir dizin yada dizin dosyası oluşturmak: Basit bir dizinleme oluşturulurken dosya anahtarlını sıralamak için harici sıralama kullanılır. Bu dizinleme için bir dizin oluşturulur. Önceki dizinleme için başka bir dizinleme oluşturulur ve bu yüzden Not: Bir dizinleme kayıt içerisindeki en geniş anahtarı bu dizini işaret eder. Ekleme ve silme işlemleri hala kesinleşmemiştir.
Sıralı Dosya Düzenlemeleri Bir dosyanın iki alternatif görünümü arasında bir seçim oluşturma: Dizinleme: bir anahtar dizinlemede dosya belli bir kayıt gibi gözükebilir; veya Sıralı: Dosya , sıralı olarak ( fiziksel olarak bitişik kayıtlar ) erişilebilir , geri dönen , anahtar tarafından sırayla kaydedilir.
Uygulama örnekleri Üniversite öğrenci kayıt sistemi: Dizinleme görünümü: kişisel kayıtlara giriş Sıralı görünüm: Dereceler ilan edildiği zaman dizi verilerini bilgisayarda denetlemek Kredi kartı sistemi: Dizinleme görünümü: interaktif banka hesabını kontrol etmek Sıralı görünüm: ödemelerin dizi işlemeleri
İlk Tasarı Sıralı grupları koruma: Kayıt kütüklerini gruplara ayırmak bir yoldur. Kütüklerin düzenini bir kayıt gibi koruyarak ekleme veya silme yoluyla ayırmak , birleştirmek ve tekrar dağıtmak. Bu kütükler için basit ve tek seviyeli dizinleme oluşturmak. Her bir kütüğün son kaydı için, anahtar içeren oluşturulmuş bir dizinleme seçmek.
Sıralı Grupları Koruma Ekleme ve silme oluşturulurken , sıralama ve yeniden düzenleme sorgu mantığına uymaz. Aşağıdaki yollarla grupları şöyle düzenleriz: Kütükleri kayıt ederek ve gruplandırarak. Kütükleri en azından yarı yarıya doldurarak. Bağlantı alanları bir önceki ve bir sonraki kütükleri belirlemek için kullanılır. Kütüklerde (ekleme/silme) gibi değişiklikler yapmanın sınırları: Eklemeler taşmalara neden olduğunda kütüklere ayrılır. Kütüklerde silme işlemleri underflow’a neden olduğu zaman kütükler birleştirilir yada tekrar dağıtılır.
Örnek: Ekleme Kütük boyutu = 4 Anahtar : Soyad ADAMS … BIXBY … CARSON … COLE … Kütük 1 Ekle “BAIRD …”: Kütük 1 ADAMS … BAIRD … BIXBY … CARSON .. COLE … Kütük 2
Örnek: silme ADAMS … BAIRD … BIXBY … BOONE … Kütük 1 Kütük 2 BYNUM… CARSON .. CARTER .. DENVER… ELLIS … Kütük 3 Kütük 4 COLE… DAVIS Sil “DAVIS”, “BYNUM”, “CARTER”,
Dizinleme Grubu Ekleme Anahtar Kütük BERNE 1 CAGE 2 DUTTON 3 EVANS 4 FOLK 5 GADDIS 6
Tree Dizinlemeleri Eğer dizin belleği yerine uydurulabilirse bu plan yada proje çok kullanışlıdır. Eğer dizin belleği yerine uyduramazsa: Bloklar içinde dizin yapısına bölünür, Bu bloklar benzer bir ağaç yapısına göre düzenlenir. Tree Dizinlemeleri: B Trees B+ Trees Basit ön ek B+ Trees …
Ayırıcılar 1 ADAMS-BERNE Kütük Anahtar sırası Ayırıcı BOLEN 2 BOLEN-CAGE CAMP 3 CAMP-DUTTON EMBRY 4 EMBRY-EVANS FABER 5 FABER-FOLK FOLKS 6 FOLKS-GADDIS
Kök 1 3 4 6 2 5 Index set EMBRY BOLEN CAMP FABER FOLKS ADAMS-BERNE
B Trees Bilgisayar biriminde B-tree en önemli veri yapılarından biridir. B’yi ne ayakta tutar (ikili değil) B-tree çok yollu arama ağacıdır. B-trees’in pek çok farklı versiyonu önerildi fakat geniş dosyalar için B+trees kullanıldı. B+tree yaprak düğümlerindeki veri kayıtlarının ve daha hızlı sıralı bilgi girişlerinin mümkün olduğu bir B-tree’dir.
B+ Tree’nin Özelliklerinin Resmi Tanımı B+ Tree düzen özellikleri v : Bütün iç düğmeler (kök hariç) en azından v anahtarlarına sahiptirler ve en çok 2v anahtarlarına sahip olabilirler. Eğer yaprak düğüm değilse kök en azından 2 çocuğa sahip olmalıdır.. Bütün yapraklar en iyi düzeydedir.. K anahtarı ile iç düğüm K+1 çocuklarına sahip olurlar 17
B+ tree: İç/Kök Düğüm Yapısı P0 K1 P1 K2 ……………… Pn-1 Kn Pn Her bir Pi çocuk düğümünü işaret eder; her bir Ki bir arama anahtarı değeridir # arama anahtarı değeri = n, # gösterge değeri = n+1 Şartlar: K1 < K2 < … < Kn Herhangi bir arama anahtarı içerisinde Pi tarafından işaret edilen K değeri, Eğer Pi = P0, gerekli K < K1 Eğer Pi = Pn, Kn K Eğer Pi = P1, …, Pn-1, Ki K < Ki+1
B+ tree: yaprak düğüm yapısı L K1 r1 K2 ……………… Kn rn R Gösterge L sol komşuyu işaret eder, R de sağ komşuyu işaret eder. K1 < K2 < … < Kn v n 2v (v bu B+ tree’nin düzenidir) Çift <Ki, ri> için Ki* kullanacağız ve kolaylık sağlaması açısından L ve R ‘leri atlayacağız.
Örnek: 1’in düzeni ile B+ tree Her bir düğüm en azından 1 giriş ve en çok 2 giriş tutmalı 10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97* 20 33 51 63 40 Kök 6
Örnek: 2’nin düzeni ile B+ tree yapısını araştırma Arama: Verilen arama anahtarı ile kayıtlar nasıl bulunur? Kökten başla ve yapraklara gitmek için anahtar karşılaştırmaları kullan Örnek: Tüm veri girişlerinin >= 24* olduğu anlarda 5*, 16*ara. İlk yaparaktan başlayıp bir değerin >= 24 olması için bir sıra taraması yapılır, en son olarak ta bir dizi taraması yapılır.. Kök 17 24 30 2* 3* 5* 7* 14* 15* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 13 10
B+ tree’de bir değeri araştırmak için değer girmek Tipik olarak bir düğüm bir sayfadır (kütük veya küme) H B+Tree’nin yüksekliği olsun: Yaprak düğümüne ulaşmak için H+1 sayfasına ulaşmak gerekir. Bir düğüm içerisindeki göstergenin numarası F olsun(iç düğüm ve isimlendirme fanout için) Seviye 1 = 1 sayfa = F0 sayfa Seviye 2 = F sayfa = F1 sayfa Seviye 3 = F * F sayfa = F2 sayfa Seviye H+1 = …….. = FH pages (iç-dış,yaprak düğümleri) D veri girişlerinin olduğunu varsayalım. Bundan dolayı D/(F-1) yaprak düğümleri D/(F-1) = FH. Bu , H = logF( ) 1 2 Seviye Yükseklik
B+ Trees Alıştırmaları Tipik Düzen: 100. Tipik Dolu faktör: 67%. Ortalama fanout = 133 (iç-dış,# Göstergenin iç düğümü) Tampon havuzundaki en üst düzeylerde sık sık tutulabilir: Seviye 1 = 1 sayfa = 8 Kbytes Seviye 2 = 133 sayfa = 1 Mbyte Seviye 3 = 17,689 sayfa = 133 MBytes 1,000,000,000veri girişi olduğunu varsayalım. H = log133(1000000000/132) < 4 5 sayfada okunan değer
B+ Tree içine veri girişinş nasıl araya eklemek gerekir? Öncelikle çeşitli örnekleri inceleyelim. 6
Örnek:B+ tree içerisine16*, 8* ekleme Kök 13 17 24 30 2* 3* 5* 7* 8* 14* 15* 16* 2* 5* 7* 3* 17 24 30 13 8* Bir yeni çocuk (yaprak düğüm)oluştur;Onun ailesine birden faza gösterge eklemek zorundayız ve böylece bir çok anahtar değeri oluşturulur. 10
8* ‘i aramayı eklemek Ortadaki değeri yukarı kopyala (yaprak ayır) 13 17 24 30 Ana düğümde araya ğiriş eklemek için 5 (5 yukarıya Kopyalandığında Yaprakta görünmesine dikkat et.) 2* 3* 5* 7* 8* 5 13 17 24 30 12
B+ tree’de araya girme Yukarı kopyalamak ve yukarı itmek arasındaki farkı anla Her iki ağaçta ve veri sayfasında minimum yer işgal ettiğinin garantisine dikkat et. 5 13 17 24 30 Bu düğümleri arayıp düzenli bir şekilde girişleri tekrar dağıtınız ve ortadaki anahtarın yukarısına iteriz. 5 24 30 17 13 sadece bir kez belirtildiğine dikkat et Ana düğümü araya giriş eklemk için. Bunu bir yaprak ayrımıyla karşılaştır .) (17 ni yukarı ilettiğine ve dizinde 12
Örnek: 8* ‘li araya eklendikten sonra B+ Tree Kök 17 5 13 24 30 2* 3* 5* 7* 8* 14* 15* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* Yükseklikte artışa yol açan kökün ayrılmasına dikkat et. 13
B+ tree’nin arasına veri girişi Özet Bul yaprak L yi düzelt. L üstüne veri girişini koy. Eğer L yeterli boşluğa sahip olursa yap! Değilse L ve yeni düğüm (L2 içerisine L yi ayırırız) Düzenli bir şekilde girişleri tekrar dağıt , orta anahtarı L2 ye koy Yukarı kopyalanır. L2 nin içerisinde L nin ailesine işaret edecek şekilde veri girişi ekle. Bu yinelemeli şekilde olabilir. Dizin düğümünü ayırmak veri düzenli bir şekilde tekrar dağıtmak, fakat orta anahtarı yukarı itmek. (yaprak ayrımlarını karşılaştır.) Ağaç büyümesini ayırmak kök yüksekliğini büyümeyi artırır. Ağaç büyümesi daha geniş veya en üste bir seviye daha uzamaya neden olur. 6
Terminoloji Kova Faktörü:Yaprak düğümü yerine uydurulabilen kayıtların sayısıdır. Fan-out :iç düğümün çocuklarının ortalama sayısı. B+tree dizini ilk dizin veya ikincil dizin olarak biri kullanılır. İlk Dizin: Kayıtların depolanma yolu aslında karşılaştırılmıştır (aynı zamanda seyrek dizin çağrılmış) İkincil Dizin: Dosyadaki kayıtlar ikincil dizinlerin anahtarlarına göre kovada gruplaşmazlar.(aynı zamanda yoğun dizin çağrılmıştır.)
B+ Tree Ağacında veri girişini silmek Önce örnekleri inceleyelim … 14
19* ve 20* Sil Hala bir şey unutmadıkmı? Kök 22* 22* 24* 27* 29* 17 5 13 24 30 2* 3* 5* 7* 8* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39* 22* 27* 29* 22* 24* Hala bir şey unutmadıkmı? 13
19* ve 20* sil ve karşılaştır Kök 17 5 13 27 30 2* 3* 5* 7* 8* 14* 16* 22* 24* 27* 29* 33* 34* 38* 39* 27 nin yukarı nasıl kopyalandığına dikkat et. Fakat onu yukarı taşıyabilirmiyiz? Şimdi 24 ü silmek istiyoruz Underflow u tekrar et! Fakat bu sefer tekrar dağıtabilirmiyiz? 15
24* ü silmek İki yaprak düğümünün birleştiğini gözle,ve 27 ailesine atıldı, fakat … Veri girişini aşağıya çekildiğini gözle (aşağısı). 30 22* 27* 29* 33* 34* 38* 39* Yeni kök 5 13 17 30 2* 3* 5* 7* 8* 14* 16* 22* 27* 29* 33* 34* 38* 39* 16
B+ Tree den veri girişini silmek: Özet Girişlerin uygun olduğu yerlerde,kökten başlayıp yaprak L yi bul.. Girişi çıkar. Eğer L en azından yarı dolu olursa yap! Eğer L sadece d-1 girişlerine sahipse, Kardeşinden ödünç olarak (L olarak aynı ana ile bitişik düğümü) yeniden tekrara dağıtmayı dene. Eğer yeniden tekrar dağıtma başarısız ise L ve kardeşi birleşir. Eğer birleşim meydana geldiyse ( L yi veya kardeşini gösteren) girişi L nin ailesinden silmek zorundasın. Kökü çoğaltabilen birleşim, yüksekliği azaltır. 14
Yaprak Olmayan Tekrar Dağıtım Örneği Tree 24* ün silinmesindeki sıralama aşağıda gösterilmiştir. (Başlangıçtaki tree ne olabilir?) Bir önceki örnekteki karşılaştırma sol çocuktan kökün sağ çocuğuna girişi yeniden dağıtabilir. Kök 22 5 13 17 20 30 14* 16* 17* 18* 20* 33* 34* 38* 39* 22* 27* 29* 21* 7* 5* 8* 3* 2* 17
Tekrar Dağıtımdan Sonra Sezgisel olarak tekrar dağıtılan girişler boyunca itilerek aile düğümünde girişleri ayırıyor. Dizin girişlerini anahtar 20 ile tekrar dağıtmak yeterlidir;gösterim için tekrar dağıtılmışmış 17 ye olduğu gibi sahip oluruz Kök 17 5 13 20 22 30 2* 3* 5* 7* 8* 14* 16* 17* 18* 20* 21* 22* 27* 29* 33* 34* 38* 39* 18
Özet Tree yapılı dizinler sıralı aramalar için idealdirler , aynı zamanda aramalar içinde iyidir. B+ tree dinamik yapıdadır. Dengelenen dizin ağaç yüksekliğini araya ekle ve sil, yüksek fanout (F) nadiren 3 veya 4 den daha fazla dinamik anlamına gelir. Nerdeyse daima sıralanmış bir dosyayı korumaktan daha iyidir. Tipik olarak ortalama 67% yer işgal eder. Eğer veri girişleri veri kayıtlarıysa , ayrımlar kurtarılanı değiştirebilir.! Çok yönlülüğünden dolayı veri tabanı yönetim sistemlerinde çok genişçe kullanılan dizin VTYS nin iyi şekilde kullanılan bileşenlerinden biridir. 23