B+-Ağaçları AVL Trees / Slide 2 İkincil Depolama için İndeksleme AVL ağacı, eğer bütün yapı ana hafızaya sığabilirse iyi bir indeksleme yapısıdır. Bir işaretçiyi bulmak veya güncellemek için bir hafıza birimi (döngüsü) yeterlidir. Eğer veri hafızaya sığamayacak kadar büyükse, AVL ağacının performansı ciddi ölçüde düşer Bir işaretçiyi bulma veya güncelleme diske erişimi gerektirir. Kökten ağaca kadar gezme diske log2 n zamanı kadar erişmeyi gerektirir. = 1048576 = 220 olduğu zaman 20 disk erişimi gerekir. 7200rpm hızla dönen bir disk için, bu işlem 0.166 saniye alır. 10 arama işlemi 1 saniyeden fazla zaman alacaktır. Bu oldukça yavaştır. n AVL Trees / Slide 3 B+ Ağacı İşlemci çok hızlı olduğu için, daha çok cpu komutu kullanarak diske erişimi azaltmak önemlidir. fikir: ağacın düğümlerinin çok çocuğa sahip olmasına izin verilmelidir. Eğer ağaçtaki herbir iç düğüm M çocuğa sahip olursa, ağacın yüksekliği log2 n yerine logM n olacaktır. Örnek olarak, eğer M = 20, öyleyse log20 220 < 5. Böylece, arama işlemini önemli ölçüde hızlandırabiliriz. AVL Trees / Slide 4 B+ Ağacı Pratikte: Herbir iç düğüm için aynı sayıda çocuk tutmak imkansızdır. M ≥ 3 olan bir B+-ağaç M-ary ağaçtır ve aşağıdaki özellikleri sağlar : Herbir iç düğüm en fazla M çocuğa sahiptir. Herbir iç düğüm, kök hariç, M/2-1 ve M-1 arasında anahtara sahiptir Bu ağacın ikili ağaca dönüşmemesini sağlar. Herbir düğümdeki anahtar sıralıdır. Kök ya bir yaprağa sahiptir yada 1 ve M-1 arası kadar anahtara sahiptir. Veri öğeleri yapraklarda depolanır. Bütün yapraklar aynı derinliktedir. Herbir yaprak L/2-1 ve L-1 arası kadar veri öğesi içerir. Bazıları için L (genellikle L << M, fakat çoğu örnekte M=L olduğu varsayılacak) AVL Trees / Slide 5 Örnek Burada, M=L=5 Kayıtlar yapraklarda depolanmıştır, fakat burada sadece anahtarlar gösterilmektedir. İç düğümlerde, sadece anahtarlar sıralıdır (bunlara ayırıcı anahtarlar da denilir.) AVL Trees / Slide 6 M=L=4 için bir B+ ağaç Bu durumda sol ve sağ çocuk işaretçilerinden hala sözedebiliriz Örnek, N in sol çocuk işaretçisi, J nin sağ çocuk işaretçisi ile aynıdır. İç düğümlerin sol alt ağaç ve sağ alt ağaçlarından söz edilebilir AVL Trees / Slide 7 B+ Ağaç İç düğümlerde hangi anahtarlar depolanır. Bunu yapmanın değişik yolları vardır. Farklı kitaplar farklı yöntemler gösterir. Bu ders kapsamında aşağıdaki mantık kullanılacaktır: bir iç düğümün içindeki anahtar i, kendisinin i+1 altağacındaki en küçük anahtardır. (örnek. Anahtar i nin sağ altağacı) Bu mantık takip edilse bile, aynı kümedeki elemanlar için tek bir B+-ağaç yapısı yoktur. AVL Trees / Slide 8 B+ ağaç Herbir düğüm/yaprak, bir I/O bloğunun içerisine sığması için tasarlanmıştır. Bir I/O blok oldukça fazla veri tutabilir. Böylece, bir iç düğüm çok fazla sayıda anahtar (çok büyük M değeri gibi) tutabilir. Bu ağacın birkaç katmanının olduğunu ifade eder ve birkaç disk erişii ile arama, ekleme veya silme işlemi yapılabilir. B+-ağacı ticari veritabanlarında kullanılan popüler bir yapıdır. Aramayı daha fazla hızlandırmak için B+ağacın ilk bir veya iki katmanı hafızada tutulur. B+-ağacın dezavantajı düğümlerin çoğunun, çoğu zaman M-1 den daha az anahtar ihtiva etmesidir. Bu ciddi alan israfına yolaçabilir. Böylece, hafızada tutulan veri için iyi bir indeksleme yapısı değildir. AVL Trees / Slide 9 Arama Varsayalım ki K anahtarı bulunmak isteniyor. Koyu ile gösterilen yok takip edilir. AVL Trees / Slide 10 Arama x aranacak olan key olsun. Kökten aramaya başlanır. Eğer bir iç düğüm v ile karşılaşılınırsa v’de depolanan anahtarlarda x’ i lineer olarak ara. Eğer v’ de x < Kmin ise, Kmin ’in sol çocuk işaretçisinden devam et. Eğer v’ de ard arda olan Ki için Ki+1 Ki ≤ x < Ki+1 , Ki+1 in sol çocuk işaretçisinden devam et. Eğer v’de x ≥ Kmax ise, Kmax ın sağ çocuk işaretçisinden devam et Eğer leaf v ile karşılaşırsak, v’de depolanan anahtarlar içinden x ‘ i lineer arama ile ararız. Eğer bulunursa, bütün kayıdı döndeririz, yoksa bulunamadı diye rapor edilir. AVL Trees / Slide 11 Ekleme Farzadelimki K anahtarını ve bu anahtarla ilgili kayıdı ekmek istiyoruz. Arama işlemini kullanarak anahtar K’yı ara. Bu bizi x yaprağına götürecektir K’ yı x’e ekle Düğümlerin bölünmesi (AVL ağaçlardaki dönüşler yerine) B+-ağaçların özelliklerini sağlamak için kullanılır [sonraki slayt] AVL Trees / Slide 12 Bir yaprağa Ekleme Eğer x yaprağı < M-1 anahtar içerirse, x’e K’yı ekle (x düğümündeki doğru yere eklenecek) Eğer x önceden dolu ise (yani M-1 anahtar içeriyorsa). X’i böl x’i ebeveyninden ayır. K yı x’e ekle, x’ de K için alan varmış gibi davran. Şimdi x M anahtara sahip. K’yı ekledikten sonra, x’i xL ve xR olarak iki parçaya böl, xL M/2 en küçük anahtarları içerecek, ve xR kalanM/2 anahtarı içerecek. J xR daki en küçük anahtar olsun. xL ve xR nin ebeveyni olarak J yi ata ve x’in ebeveynine J yi ve yeni çocukları ekle AVL Trees / Slide 13 Dolu olmayan yaprağa ekleme AVL Trees / Slide 14 Yaprağın bölünmesi: T’ yi ekle AVL Trees / Slide 15 Devamı AVL Trees / Slide 16 İki yaprağı yazmak için iki disk erişimi olur, ebeveyni güncellemek için bir disk erişim olur. L=32 için, 16 ve17 eleman içeren yapraklar oluşturulur. Başka bölme işlemi olmaksızın 15 daha fazla ekleme yapılabilir. AVL Trees / Slide 17 Başka bir örnek: AVL Trees / Slide 18 Devamı => Need to split the internal node AVL Trees / Slide 19 Bir iç düğümü bölme Dolu iç düğüm x içine K anahtarının eklenmesi: x’i ebeveynınden ayır. K’yı ve onun sol ve sağ çocuk işaretçilerinin ekle, Bu durumda x M anahtara sahiptir. xL and xR olarak x’i 2’y2 böl, xL ( M/2 - 1 ) en küçük ahahtarları içerecektir, ve xR M/2 en büyük anahtarları içerecektir. (M/2)inci anahtar J, xL or xR ın içine yerleştirilmemiştir. J yi xL ve xR‘ın ebeveyni yap ve x’ın eski ebeveynine J’ yı ve onun çocuk işaretçilerini ekle. AVL Trees / Slide 20 Örnek: İç düğümü bölme AVL Trees / Slide 21 Devamı AVL Trees / Slide 22 Sonlandırma Bölme dolu iç düğümlerle karşılaştığımız sürece devam edecektir. Eğer bölünen x’in ebeveyni yoksa yeni bir kök oluşturulur ve yeni kök J’yi ve onun iki çocuğunu içerir.