B⁺-tree je datová struktura založená na B-stromu , vyváženém -ary vyhledávacím stromu s proměnným, ale často velkým počtem dětí na uzel. B⁺-strom se skládá z kořene, vnitřních uzlů a listů, kořenem může být list nebo uzel se dvěma nebo více dětmi.
Původně byla struktura určena k ukládání dat pro efektivní vyhledávání v blokově orientovaném úložném prostředí - zejména pro souborové systémy; aplikace je způsobena tím, že na rozdíl od binárních vyhledávacích stromů mají B⁺-stromy velmi vysoký faktor větvení (počet ukazatelů z nadřazeného uzlu na potomky je obvykle řádově 100 nebo více), což snižuje počet I/O operace, které vyžadují hledání prvku ve stromu.
Varianta B⁺-stromu, ve které byly všechny hodnoty uloženy v listových uzlech, byla systematicky přezkoumána v roce 1979 [1] s tím, že takové struktury IBM používá v technologii přístupu k souborům na sálových počítačích VSAM od roku minimálně 1973.
Struktura je široce používána v souborových systémech - NTFS , ReiserFS , NSS , XFS , JFS , ReFS a BFS používají tento typ stromu pro indexování metadat; BeFS také používá B⁺-stromy k ukládání adresářů. Systémy pro správu relačních databází jako DB2 , Informix , Microsoft SQL Server , Oracle Database (od verze 8), Adaptive Server Enterprise a SQLite podporují tento typ stromu pro indexy tabulek. Mezi NoSQL DBMS pracujícími s modelem klíč-hodnota je datová struktura implementována pro přístup k datům v CouchDB , MongoDB (při použití úložného subsystému WiredTiger ) a Tokyo Cabinet .
B⁺-strom je vyvážený -ary pořadí (nebo stupeň) vyhledávací strom , který splňuje následující vlastnosti:
Vybudování B⁺-stromu může vyžadovat přebudování mezistruktury, to je způsobeno skutečností, že počet klíčů v každém uzlu (kromě kořene) musí být od do kde je stupeň (nebo pořadí) stromu. Když se pokusíte vložit ( )-tý klíč do uzlu, je nutné tento uzel oddělit; ( )-tý klíč, který je umístěn na sousední vrstvě stromu, funguje jako oddělovací klíč vytvořených větví. . Zvláštním případem je rozdělení kořene, protože v tomto případě se zvyšuje počet vrstev stromu. Charakteristickým rysem dělení listu B⁺-stromu je, že je rozdělen na nestejné části. Výsledkem rozdělení vnitřního uzlu nebo kořene jsou uzly se stejným počtem klíčů Rozdělení listu může způsobit "řetězovou reakci" rozdělování uzlů, která končí u kořene.
Kořen B⁺-stromu je výchozím bodem pro celý rozsah hodnot, ve kterém je každý vnitřní uzel podintervalem.
Řekněme například, že potřebujeme najít hodnotu klíče v B⁺-stromu. K tomu hledáme listový uzel obsahující hodnotu V každém interním uzlu potřebujeme zjistit, který následující podřízený uzel následovat, vnitřní uzel B⁺-stromu má nejvíce potomků, kde každý z nich představuje samostatný subinterval. Příslušný uzel se vybere vyhledáním v klíčových hodnotách uzlu:
Funkce : search ( k ) return tree_search ( k , root ); Funkce : tree_search ( k , node ) , pokud je uzel list , vrátí uzel ; switch k do case k < k [ 0 ] return tree_search ( k , p [ 0 ]); case k [ i ] ≤ k < k [ i + 1 ] return tree_search ( k , p [ i + 1 ]); case k [ d ] ≤ k return tree_search ( k , p [ d + 1 ]);(Tento pseudokód předpokládá, že duplikáty jsou ignorovány.)
Chcete-li přidat nový klíč nebo nový záznam, musíte nejprve najít uzel, kam je chcete přidat. V tomto případě je algoritmus:
B-stromy se na rozdíl od B⁺-stromů rozšiřují ze strany kořene, nikoli listů.
Chcete-li odstranit klíč nebo položku, musíte nejprve najít listový uzel, ve kterém se nachází. Algoritmus pro odstranění z listového uzlu:
Spojení se může rozšířit až ke kořeni, v takovém případě se výška stromu sníží.
Výpočetní složitost každé operace v nejhorším případě: kde je pořadí stromu nebo faktor větvení; je počet prvků ve stromu větví v uzlech stromu.
Strom (datová struktura) | |
---|---|
Binární stromy | |
Samovyrovnávací binární stromy |
|
B-stromy |
|
předponové stromy |
|
Binární dělení prostoru | |
Nebinární stromy |
|
Rozbití prostoru |
|
Jiné stromy |
|
Algoritmy |
|