B-trees: la clave para búsquedas rápidas en bases de datos

Fuentes: B-trees and database indexes — PlanetScale

Este artículo de PlanetScale explica los B-trees y B+trees, estructuras de datos fundamentales en muchos sistemas de gestión de bases de datos (DBMS) como MySQL, PostgreSQL, MongoDB y DynamoDB. Son la base de los índices que permiten búsquedas de datos eficientes.

¿Qué son los B-trees? Un B-tree es una estructura de datos en forma de árbol que almacena pares de clave-valor. Cada nodo del árbol contiene un número específico de pares clave-valor, y los elementos dentro de cada nodo están ordenados. Esta ordenación permite búsquedas rápidas: el algoritmo busca la clave, y si no la encuentra, determina dónde debería insertarse, siguiendo un hijo hasta el siguiente nivel. La eficiencia depende de la 'profundidad' del árbol: menos niveles significan búsquedas más rápidas. Son especialmente útiles para grandes cantidades de datos almacenados en disco, ya que cada nodo puede tener un tamaño optimizado para coincidir con el tamaño de los bloques de disco (típicamente 4KB, 8KB o 16KB), lo que minimiza la cantidad de operaciones de lectura/escritura en el disco. Un solo árbol puede almacenar millones o incluso miles de millones de pares clave-valor.

¿Qué son los B+trees? Los B+trees son una variante optimizada de los B-trees. La principal diferencia es que los pares clave-valor se almacenan solo en los nodos hoja, mientras que los nodos internos solo contienen claves y punteros a los nodos hijos. Esto permite que los nodos internos almacenen más claves, reduciendo la profundidad del árbol y mejorando el rendimiento. Además, los nodos hoja están enlazados entre sí, lo que facilita la iteración a través de los datos en orden. MySQL, a través de su motor de almacenamiento InnoDB, utiliza B+trees para almacenar todos los datos de las tablas, con la clave primaria como clave del árbol. Cada nodo tiene un tamaño predeterminado (16KB), y InnoDB carga el nodo completo desde el disco, incluso si solo necesita una parte de los datos que contiene.

Casos de uso y aplicaciones: Los B-trees y B+trees son la columna vertebral de los índices de bases de datos. Se utilizan para acelerar las consultas SQL, especialmente aquellas que involucran cláusulas WHERE. Cuando se crea un índice secundario (en una columna diferente a la clave primaria), se construye otro B+tree para permitir búsquedas más rápidas basadas en esa columna.

Consideraciones: El uso de UUIDs como claves primarias puede ser problemático con B-trees, ya que su naturaleza aleatoria puede provocar fragmentación y un rendimiento más lento. La profundidad del árbol es crucial para el rendimiento; árboles más profundos implican búsquedas más lentas. El tamaño de los nodos y el número de claves por nodo influyen en la eficiencia, y deben optimizarse para el tipo de datos y la estructura de la tabla.