B-strom je zobecněním binárního vyhledávacího stromu. Na rozdíl od něj však může mít každý uzel více než dvě děti (potomky) a obsahovat více než jeden klíč. Písmeno „B“ v názvu nebylo nikdy autory (Rudolf Bayer a Edward M. McCreight) přesně vysvětleno, ale nejčastěji se interpretuje jako Balanced (vyvážený), protože strom automaticky udržuje všechny své listy ve stejné hloubce.
Hlavní výhodou B-stromu je minimalizace počtu operací čtení z disku, což je u velkých databází nejpomalejší část procesu.
Vyhledávání v B-stromu je podobné listování v telefonním seznamu:
1. Začnete v **kořenovém uzlu**. 2. Porovnáte hledaný klíč s klíči v uzlu. 3. Najdete interval, do kterého váš klíč patří (např. klíč je mezi 10 a 20). 4. Sledujete ukazatel na odpovídajícího potomka (podstrom). 5. Opakujete, dokud nenajdete shodu nebo nedosáhnete listu.
Díky tomu, že jsou klíče v každém uzlu seřazené, lze uvnitř uzlu použít binární vyhledávání, což proces dále urychluje.
Když se do B-stromu přidávají nová data, strom roste „odspodu nahoru“:
1. Data se vloží do příslušného listu. 2. Pokud je list plný, dojde k jeho **štěpení** (split). Prostřední prvek se přesune o úroveň výš do rodičovského uzlu. 3. Pokud se tím zaplní i rodičovský uzel, štěpí se i ten. Takto se může zaplnit až kořen, což je jediný okamžik, kdy se výška stromu zvýší o 1 úroveň.
V praxi se nejčastěji setkáme s variantami, které základní model vylepšují:
| Varianta | Rozdíl oproti základnímu B-stromu | Použití |
|---|---|---|
| B+ strom | Skutečná data jsou pouze v listech. Listy jsou navzájem propojeny lineárně. | Nejpoužívanější v MySQL, PostgreSQL, NTFS. |
| B* strom | Vyžaduje, aby uzly byly zaplněny alespoň ze 2/3 (místo 1/2), což šetří místo. | Souborové systémy (HFS+). |
Bez B-stromů by operace typu „najdi všechny objednávky od 1. ledna do 15. ledna“ vyžadovaly prohledání celého pevného disku. B+ strom díky propojení listů umožní najít začátek intervalu a pak prostě „přečíst“ sousední listy, což je bleskové.
Související pojmy: Indexování, RDBMS, Databáze, Latence, RAM, SQL, Binární strom.