Sí, pero. Siempre hay un pero.
Depende de la cantidad de elementos que espera tener, el costo de lectura / escritura en sus medios y la relación entre lecturas y escrituras.
Si espera tener 100 elementos, o incluso 10000, olvide las estructuras de datos complejas. En estos casos, los árboles B y los árboles B + probablemente tendrán más sobrecarga que ganancia. Por supuesto, debes medir tu tiempo, pero para eso tendrías que implementar el árbol b + para empezar. Si no tiene demasiados elementos, haga lo más simple y luego decida si la velocidad está bien.
- Si la potencia informática de la IA consciente se midiera en un coeficiente intelectual, ¿cuál sería?
- ¿Es el aprendizaje profundo la mejor forma de aprendizaje automático?
- ¿Cómo se solucionan los errores informáticos?
- ¿Debo solicitar una pasantía de CS incluso si no cumplo con algunos o todos los requisitos?
- ¿Dónde puedo encontrar una imagen de una base de datos?
Cuando tienes miles de millones de elementos y obtienes más lecturas que escrituras, entonces el árbol B + probablemente gane. Eso se debe a que con mil millones de elementos, un árbol AVL tendrá una altura de 30–31, de la cual se almacenarán en caché 20 o menos. Con 10 accesos a disco para cada hoja aleatoria, tomará alrededor de 200–400 ms.
El uso de b + tree con 1024 despliegue, tiene una altura de 3, quizás 4, más un nodo de datos. Suponiendo el mismo almacenamiento en caché que el anterior, solo habrá 2–3 accesos aleatorios al disco que le llevarán entre 30 y 60 ms. El código de búsqueda dentro de cada nodo será más complicado, pero costará mucho menos de 10 ms. En total, ahorrará alrededor de 170–340 ms por lectura aleatoria de sus datos con b + tree. Eso es más de 5 veces más rápido, casi 6.
Las escrituras son mucho más complicadas con b + tree, especialmente si su patrón de uso requiere muchas ejecuciones de equilibrio. También depende de cuán estrictas sean tus reglas de equilibrio. Cuanto más quieras mantener el árbol denso, más pagarás. Creo que debe permitir una densidad del 50% en cada nodo, tal vez incluso un poco menos denso, para evitar fusiones y divisiones frecuentes.
En ssd, la penalización por fallo de caché de disco es mucho menor, lo que reduce considerablemente la ganancia del uso de b + tree.