07/09/2012 Organización B+ Se diferencia de la B en que los registros Organizaciones Balanceadas (2) sólo se almacenan en los nodos hoja, que están encadenados entre sí → Permite recuperación secuencial Los nodos internos o índice, almacenan sólo identificadores que sirven de guía para llegar a las hojas → Conforman un índice B a las hojas Organización B+ Organizaciones B* y B# 1 ODD - Curso Servetto FIUBA 2 Capacidades de elementos en nodos internos y hojas respect.: 4, 6 ODD - Curso Servetto FIUBA Primitivas B+ NODO 0: 2, 1; 8(41543) 7 Mismas primitivas que la organización B excepto la de búsqueda, y una adicional de recuperación secuencial NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 La búsqueda es aproximada → si no se encuentra en una hoja el registro con el identificador dado, devuelve el primer registro con identificador mayor al buscado (por si se inicia recorrido secuencial) Siguiente → Devuelve el siguiente registro a partir del último accedido → Estrategias Puede haber una primitiva para devolver el primer registro del archivo NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 6; (20173)(21373)(23548)(27906)(28195)(29084) 4 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 3 ODD - Curso Servetto FIUBA 4 1. Inserción del registro con clave 25000: ODD - Curso Servetto FIUBA Se acomodan los registros en elnodo 5 y de devuelve al padre el registro central: NODO 0: 2, 1; 8(41543) 7 NODO 0: 2, 1; 8(41543) 7 NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4 NODO 8: 1, 3; 2(12853) 9(20173) 5(33810) 4 ← (27906) NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 6; (20173)(21373)(23548)(27906)(28195)(29084) 4 NODO 5: 0, 6; (20173)(21373)(23548)(25000)(28195)(29084) 4 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 Sobreflujo en nodo 5. 5 ODD - Curso Servetto FIUBA 6 ODD - Curso Servetto FIUBA 1 07/09/2012 Desde el nodo 8 se dispone de un nodo nuevo (10) y se acomoda el registro que subió primero, y luego la segunda mitad del nodo con sobreflujo, se graban los dos nodos y se incorpora al nodo 8 un orientador: Desde el nodo 0 se graba al nodo 8: NODO 0: 2, 1; 8(41543) 7 NODO 0: 2, 1; 8(41543) 7 NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4 NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 7 ODD - Curso Servetto NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 FIUBA 8 ODD - Curso Servetto Se termina sin necesidad de grabar la raíz, ya que noresultó modificada: Supresión de registro con identificador 45454: NODO 0: 2, 1; 8(41543) 7 NODO 0: 2, 1; 8(41543) 7 FIUBA NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4 NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 7: 1, 2; 1(46396) 6(48442) 3 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 1: 0, 3; (41543)(44353)(45454) 6 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 6: 0, 3; (46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 Subflujo en nodo 1 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 9 ODD - Curso Servetto FIUBA 10 FIUBA Desde el padre (nodo 7) se intenta balancear con hermano adyacente, y como no se puede se fusionan y se libera al 6: Desde el padre (nodo 0) se intenta balancear con hermano adyacente, y como se puede, se balancean el 8 y el 7 y se graban: NODO 0: 2, 1; 8(41543) 7 NODO 0: 2, 1; 8(33810) 7 NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10(33810) 4 NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 10: 0, 3; (27906)(28195)(29084) 4 NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 7: 1, 2; 4(41543) 1(48442) 3 NODO 7: 1, 2; 1(48442) 3 ← subflujo 11 ODD - Curso Servetto NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3 NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 ODD - Curso Servetto FIUBA 12 ODD - Curso Servetto FIUBA 2 07/09/2012 Se termina grabando la raíz: Archivos B vs Archivos B+ NODO 0: 2, 1; 8(33810) 7 Ventajas de la Organización B sobre la B+ NODO 8: 1, 3; 2(12853) 9(20173) 5(27906) 10 Puede requerir menos nodos que un B+ para cargar los mismos datos (no tiene redundancia de identificadores). Algunos datos se pueden encontrar antes de llegar a una hoja. NODO 2: 0, 4; ( 951)( 2394)( 4963)( 7790) 9 NODO 9: 0, 5; (12853)(12917)(13401)(18004)(18488) 5 NODO 5: 0, 4; (20173)(21373)(23548)(25000) 10 NODO 10: 0, 3; (27906)(28195)(29084) 4 Desventajas de la organización B NODO 7: 1, 2; 4(41543) 1(48442) 3 Sólo una pequeña proporción de datos se puede encontrar tempranamente. Si los datos son grandes, los nodos internos tienen pocos hijos y el árbol es alto. NODO 4: 0, 4; (33810)(34466)(39784)(39794) 1 NODO 1: 0, 3; (41543)(44353)(46396)(47165)(47405) 3 NODO 3: 0, 5; (48442)(49460)(50699)(58648)(64807) 0 13 ODD - Curso Servetto FIUBA 14 Capacidades de elementos en nodos internos y hojas respect.: 4, 7 Son variantes de las organizaciones B y B+ con primitivas de inserción y supresión modificadas de manera que garanticen que todos los nodos del árbol excepto el raíz tengan ocupada más de dos tercios de su capacidad Capacidad de la raíz Interna: (4 * 4) div 3 = 5 Hoja: (4 * 7) div 3 = 9. Se usan los nodos 0 y 1 para almacenar la raíz. Carga mínima de nodos Altas: cuando un nodo queda con sobreflujo, se trata de balancear con un hermano adyacente, y si no se puede porque el hermano está completo, se agrega un nodo nuevo entre medio y se balancea la carga de los dos originales entre tres (quedan con 2/3 de su capacidad ocupada) Bajas: cuando un nodo queda con subflujo y no se puede balancear con un hermano adyacente porque éste tiene carga mínima, se intenta balancear con otro hermano, y si tampoco se puede se libera uno de ellos y se distribuye su carga entre los otros dos, que quedan completos ODD - Curso Servetto FIUBA Internos: (4 * 2) div 3 = 2 Hojas: (7 * 2) div 3 = 4 NODO 0-1: 2( 483) 3( 587) 5( 844) 4 NODO 2: ( 1)( 74)( 154)( 157)( 280)( 360)( 473) NODO 3: ( 491)( 508)( 521)( 541)( 543)( 549)( 573) NODO 5: ( 668)( 687)( 817)( 832) NODO 4: ( 879)( 885)( 906)( 941)( 955)( 976)( 981) 16 NODO 0-1: 2( 483) 3( 587) 5( 885) 4 NODO 2: ( 1)( 74)( 154)( 157)( 280)( 360)( 473) NODO 3: ( 491)( 508)( 521)( 541)( 543)( 549)( 573) NODO 5: ( 668)( 687)( 817)( 832)( 844)( 879) NODO 4: ( 900)( 906)( 941)( 955)( 976)( 981) ODD - Curso Servetto ODD - Curso Servetto FIUBA Alta 100 Sobreflujo en nodo 2; como el hermano derecho está lleno se agrega un nodo y se distribuye la carga de ambos entre 3: 14 div 3 = 4; como 14 mod 3 = 2, se va cargando los hermanos con un elemento más de izq. a der. hasta repartir el resto (5-5-4) Lecturas: 0, 2 Escrituras: 2, 6, 0, 1 Alta 900 Sobreflujo en nodo 4; como no hay hermano derecho se balancea con el izquierdo: (4 + 7 + 1) div 2 = 6 Lecturas: 0, 4, 5 Escrituras: 5, 4, 0 17 FIUBA Ejemplo B* Organizaciones B* y B# 15 ODD - Curso Servetto NODO 0-1: 2( 280) 6( 521) 3( 587) 5( 885) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491)( 508) NODO 3: ( 541)( 543)( 549)( 573) NODO 5: ( 668)( 687)( 817)( 832)( 844)( 879) NODO 4: ( 900)( 906)( 941)( 955)( 976)( 981) FIUBA 18 ODD - Curso Servetto FIUBA 3 07/09/2012 Altas 600 y 700 Sobreflujo en nodo 5 al incorporar el 700; se balancea con hermano derecho: (7 + 6 + 1 ) div 2 = 7 Lecturas 600: 0, 1, 5 Escrituras 600: 5 Lecturas 700: 0, 1, 5, 4 (p/balanceo) Escrituras 700: 5, 4, 1 Alta 759 Sobreflujo en nodo 5; como no se puede balancear con hermano derecho porque está lleno, se agrega un nodo nuevo; la raíz no se parte porque su capacidad máxima como nodo interno es 5 Lecturas: 0, 1, 5, 4 Escrituras: 5, 7, 4, 1 NODO 0-1: 2( 280) 6( 521) 3( 587) 5( 817) 7( 906) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491)( 508) NODO 3: ( 541)( 543)( 549)( 573) NODO 5: ( 600)( 668)( 687)( 700)( 759) NODO 7: ( 832)( 844)( 879)( 885)( 900) NODO 4: ( 941)( 955)( 976)( 981) NODO 0-1: 2( 280) 6( 521) 3( 587) 5( 879) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491)( 508) NODO 3: ( 541)( 543)( 549)( 573) NODO 5: ( 600)( 668)( 687)( 700)( 817)( 832)( 844) NODO 4: ( 885)( 900)( 906)( 941)( 955)( 976)( 981) 19 21 ODD - Curso Servetto FIUBA 20 ODD - Curso Servetto FIUBA Baja 521 Como el elemento está en un nodo interno, se debe sustituir por el siguiente, que está siempre en una hoja, en este caso el nodo 3, que queda con subflujo y debe balancearse con su hermano derecho, el 5 Lecturas: 0, 3, 5 (p/balanceo) Escrituras: 3, 5, 0 Baja 573 Subflujo en el nodo 3; se intenta balancear el nodo 3 con su hermano derecho (5), pero como tiene carga mínima no se puede, entonces se intenta con el izquierdo (6) Lecturas: 0, 3, 5, 6 Escrituras: 6, 3, 0 NODO 0-1: 2( 280) 6( 541) 3( 600) 5( 817) 7( 906) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491)( 508) NODO 3: ( 543)( 549)( 573)( 587) NODO 5: ( 668)( 687)( 700)( 759) NODO 7: ( 832)( 844)( 879)( 885)( 900) NODO 4: ( 941)( 955)( 976)( 981) NODO 0-1: 2( 280) 6( 508) 3( 600) 5( 817) 7( 906) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491) NODO 3: ( 541)( 543)( 549)( 587) NODO 5: ( 668)( 687)( 700)( 759) NODO 7: ( 832)( 844)( 879)( 885)( 900) NODO 3: ( 941)( 955)( 976)( 981) ODD - Curso Servetto FIUBA 22 Baja 549 Subflujo en nodo 3; no se puede balancear con hno. derecho ni con hno. izquierdo, entonces se divide el contenido del 3 entre sus hermanos quedando (4 + 1 + 3 + 4) div 2 = 6 elementos en cada uno, y se libera el 3 Lecturas: 0, 3, 5, 6 Escrituras: 6, 5, 0, 1 ODD - Curso Servetto FIUBA Archivos B y B+ vs Archivos B* y B* Ventajas de B* y B# respecto de B y B+ Al tener mayor densidad de carga resultan de menor altura y por lo tanto implican menor costo de lecturas para búsquedas NODO 0-1: 2( 280) 6( 543) 5( 817) 7( 906) 4 NODO 2: ( 1)( 74)( 100)( 154)( 157) NODO 6: ( 360)( 473)( 483)( 491)( 508)( 541) NODO 5: ( 587)( 600)( 668)( 687)( 700)( 759) NODO 7: ( 832)( 844)( 879)( 885)( 900) NODO 4: ( 941)( 955)( 976)( 981) Desventajas de B* y B# respecto de B y B+ Las inserciones y supresiones resultan más costosas en lecturas y escrituras Nodos libres: 3 23 ODD - Curso Servetto FIUBA 24 ODD - Curso Servetto FIUBA 4