UNIVERSIDAD DE LOS ANDES
FACULTAD DE INGENIERÍA
POSTGRADO EN COMPUTACIÓN


Tema 2. Modelos de objetos

Prof. Isabel Besembel Carrera
Núcleo La Hechicera. Edif. Economía. 3er. piso. Ala 3S. Mérida. Venezuela.

Sesión 3. Modelos físicos. Tabla de contenido:

Definición de una BD en un modelo genérico
Relaciones de soporte de acceso
Definiciones
Estructura de almacenamiento
Índices sobre la jerarquía de tipos
La función de materialización
Representación de almacenamiento para las RGM
Ubicación de los objetos
Descomposición y replicación
Otros modelos de almacenamiento físico
Referencia bibliográfica:
Kim, W. Modern database systems. The object model, interoperability, and beyond. Addison Wesley / ACM Press. Capítulo 9. 1995.

Referencia bibliográfica:
Willshire, M. y Kim, H. Properties of Physical Storage Models for Object-Oriented Databases. IEEE PARBASE-90. 1990.

Programa del curso

Definición de una BD en un modelo genérico de objetos (Generic Object Model)

type Empleado is
body
[
nombre : string;
trabajaEn : Departamento;
salario : int;
historial : { Cargo }; ]

operations
declare
capacitación : -> int;

implementation
define
capacitación is
begin
var
tc, td : float := 0.0 ;
foreach (
t in self . historial )
begin

tc := tc + t . competencia * t . duración;
td := td + t. duración;
end foreach
return
round(tc/td);
end define capacitación;
end type Empleado;

type Cargo is
body
[
competencia : int;
duración : float; ]
end type
Cargo

type Departamento is
body
[
nombre : string;
secretaria : Empleado;
jefe : Gerente ;]
end type
Departamento;

type Gerente supertype Empleado is
body
[
regrese : Empleado ;]
end type
Gerente;

Ejemplos de consultas:

Q1:

range e : Empleado
retrieve e
where e.trabajaEn.jefe.salario < 1.200.000

Q2:

range e : Empleado
retrieve e
where e.competencia = 10

Q3:

range e : Empleado
retrieve e.trabajaEn.jefe.salario
where e.nombre = "Perez"

Un ejemplo de extensiones se puede ver en la figura 1.

Figura 1. Ejemplo de extensiones de la base de datos anterior.


Relaciones de soporte de acceso (RSA):


Indización de expresiones de caminos:


Definiciones:


1. El tipo ti-1 está definido como type ti-1 is [... , Ai: ti, ...], lo cual indica que ti-1 es una tupla con un atributo Ai en el dominio ti.
2. El tipo ti-1 está definido como type ti-1 is [... , Ai: {ti}, ...], lo cual indica que Ai es un conjunto en el dominio ti. Una ocurrencia de un conjunto en el camino.

Si se cumple 1 la expresión es lineal, de lo contrario es de conjunto.

Si tn es un tipo átomico, Sn tiene dominio tn, entonces sus valores son almacenados directamente en la RSA.

1. Oi-1.Ai = Oi si Ai es un atributo simplemente valuado
2. Oi pertenece a Oi-1.Ai si Ai es un atributo multivaluado (conjunto)

Ejemplo: P es estrictamente igual a Empleado.trabajaEn.jefe.salario como lo muestra la figura 3.

La extensión canónica: donatada como [t0.A1,...,An] can contiene información sobre los caminos completos desde t0 hasta tn. Solo puede ser usada para evaluar consultas que se originan en t0 y van a tn.

Extensiones: Sea |X| ( ]X[ , ]X| , |X[ ) el producto natural ( externo, externo izquierdo, externo derecho) sobre la última columna de la primera relación y la primera columna de la segunda. Las relaciones anteriores se obtiene con:

[t0.A1. ... .An] can := [t0.A1] |X| ... |X| [tn-1.An]
[t0.A1. ... .An] comp := [t0.A1] ]X[ ... ]X[ [tn-1.An]
[t0.A1. ... .An] izq := (... ([t0.A1] ]X| ... [t1.A2]) ... ]X| [tn-1.An])
[t0.A1. ... .An] der := ([t0.A1] |X[... ([tn-2.An-1] |X[ [tn-1.An]) .... )

La extensión completa contiene más información que las extensiones completas a la izquierda y a la derecha, que a su vez contienen más información que la canónica.

La izquierda y la derecha no son comparables.

[ Empleado . trabajaEn . jefe . salario ] comp

S0: Oid Empleado

oid4
oid5
oid6
oid11
------
.......

S1: Oid Departamento

oid8
oid8
oid9
oid8
oid10
.......

S2: Oid Gerente

oid11
oid11
oid12
oid11
oid13
.......

S3: moneda

1.500.000
1.500.000
nulo
1.500.000
2.500.000
.......

Aplicabilidad: Una RSA [t0.A1. ... .An] X bajo la extensión X es aplicable en el camino s.Ai. ... .Aj, donde s es un subtipo de ti-1 bajo las condiciones siguientes:

 

Aplicable ( [t0.A1. ... .An] X, s.Ai. ... .Aj ) =

|

|

|

|

X = comp /\ 1 < = i < = j < = n

X = izq /\ 1 = i < = j < = n

X = der /\ 1 < = i < = j = n

X = can /\ 1 = i < = j = n

La extension completa puede ser utilizada para evaluar cualquier subcamino, las izquierda y derecha pueden utilizarse solamente para evaluar prefijos y sufijos de caminos, respectivamente, y la canónica solo para evaluar un camino completo.


Estructura de almacenamiento


La estructura de almacenamiento para las RSA está basada en la propuesta de Valduriez 1987 denominada índice de producto binario. Cada RSA se almacena en dos índices, el primero tiene como clave el atributo más a la izquierda y el segundo el atributo más a la derecha. La estructura de los índices pueden ser: tablas hash o árboles_B+. La figura 3 muestra una ilustración de ello.

Figura 3. Uso de índices de acceso con árboles_B+.

El árbol_B+ de la izquierda agrupa hacia adelante y el de la derecha agrupa hacia atrás. El recorrido hacia atrás constituye un semi-producto derecha-a-izquierda:

proyecciónS0 ( [Empleado . trabajaEn . jefe]can semi-producto a la izquierda( restricción S1 < 200.000 [Gerente.salario]can ) )

El recorrido hacia adelante se corresponde con un semi-producto izquiera-a-derecha:

proyecciónS3 ( ( restricción S0 = oid5 [Empleado . trabajaEn . jefe]can ) semi-producto a la derecha[Gerente . salario]can )

El índice de caminos de Maier y Stein 1986 se restringe a caminos que contengan atributos monovaluados y su representación está limitada a particiones binarias. Los usados en Orion son un caso especial de las RSA.


Índices sobre la jerarquía de tipos


Figura 4. Ejemplo de índice por tipo.

longitud del registro

entrada 1 entrada 2

longitud de clave

valor de clave

página de desborde # Oids directorio id1, id2, ..., idj .....

donde

directorio
# Tipos T1 desplazamiento T2 desplazamiento ... Tn desplazamiento

Figura 5. Ejemplo de índice sobre la jerarquía de tipos.

Low,Ooi y Lu 1992 proponen los árboles_H que son construidos anidando los árboles_B+, así el índice de un subtipo está dentro del índice del supertipo. La figura 6 ilustra un ejemplo de estos.

Figura 6. Ejemplo de árboles_H.

El rango de un subárbol referenciado por un apuntador L debe estar contenido en el rango del árbol del supertipo. Todos los nodos hojas del árbol del subtipo son cubiertos por el árbol del subtipo.


La función de materialización


La RGM < f1, ... , fm > para las funciones f1,...,fm es de aridad n + 2 * m y tiene la forma siguiente:

< f1, ... , fm > : [O1:t1, ... , On: tn , f1: tn + 1 V1 : bool, ... , fm: tn + m , Vm : bool]

Oi : son los argumentos, Fi : guardan los resultados y Vi: es la validez de esos resultados.

Para todo T que pertenece a < f1, ... , fm > : T . Vj = Verdadero => T . fj = fj (T . O1,..., T . On)

1. Rematerialización inmediata: El resultado de la función invalidado se recalcula inmediatamente cada vez que ello ocurra.
2. Rematerialización tardía: El resultado invalidado de la función se marca como inválido colocando Vi como falso y ella es recalculada luego cuando se vuelva a cargar el sistema o cuando esa función se necesite.

Ejemplo: para Q2

< Empleado . competencia >

O1: Oid Empleado

oid5
oid6
oid7
......
oid12
oid13

competencia : int

7
8
3
.......
8
.......

V competencia : bool

Verdadero
Verdadero
Verdadero
......
Verdadero
.......

Proyección O1 ( Restricción competencia = 10 < Empleado . competencia > )

La RGM < Empleado . competencia > contiene una competencia válida para todas las instancias de Empleado.


Representación de almacenamiento para las RGM


[O : Oid, F : Fid, A : List(Oids)]

Las referencias inversas se insertan en la RRI durante los procesos de materialización. Durante una rematerialización las modificaciones de las funciones son invocadas. Cada vez que un objeto es actualizado en la base de objetos, la RRI se inspecciona para determinar cual resultado materializado tiene resultados inválidos.

  1. Aislamiento de las propiedades relevantes del objeto: Normalmente los resultados materializados no dependen sino de una fracción del estado de los objetos visitados en la materialización. Ejm: la competencia no depende del sexo del Empleado.
  2. Reducción de los chequeos de la RRI: Mantener más información dentro de los objetos para evitar mirar la RRI para todos los objetos actualizados.
  3. Explotar la encapsulación estricta: Un subobjeto no puede ser actualizado separadamente de su objeto, por lo que se puede reducir el número de invalidaciones con el disparo de la invalidación del objeto de alto nivel.
  4. Compensación de las actualizaciones: En vez de usar la función de materialización para recalcular un resultado inválido, se pueden usar acciones compensatorias que usen el resultado viejo y los parámetros de la actualización para recalcular el nuevo resultado de forma más eficiente.

Ubicación de los objetos


El orden puede ser en base al tiempo de creación del objeto o a uno especificado por el usuario. Los algoritmos de recorrido son: primero-en-profundidad, primero-a-lo-ancho y primero-el-mejor.

En primero-el-mejor las referencias tienen un peso. Si se usa 0 y 1 como pesos, el algortimo puede ser especificado por un árbol de ubicación. La figura 7 presenta un ejemplo.

Figura 7. Ejemplo de un árbol de ubicación.

1. Particionamiento heurístico: Se incia con uno cualquiera, se itera con cada par intercambiando objetos si el peso total decrece. Problemas: tamaño de los objetos, espacio inutilizado en las páginas y O( n 2.4 ).
2. Particionamiento rápido: Basado en el algoritmo de Kruskal para calcular árboles de expansión mínimos.

1. a tiempo de creación
2. a tiempo de finalización de la transacción que los crea
3. en cualquier punto en el tiempo


Descomposición y replicación


(oid5, nombre, "Perez")

(oid5, trabajaEn, oid9)

(oid5, salario, 90.000)

(oid5, historial, {oid1,oid2}

(oid12, nombre, "Compras")

(oid12, trabajaEn, oid9)

(oid12, salario, 190.000)

(oid12, historial, {...})

(oid12, nombre, "Compras")

(oid12, regreso, oid6)


Otros modelos de almacenamiento físico


Se presentan otros modelos de almacenamiento físico según Willshire y Kim en [WiK-90]. Para ello se utilizará la base de datos ejemplo mostrada en la figura 8.

Figura 8. Estructura lógica de la base de datos de ejemplo.

1.- Modelo físico 1:

La figura 9 ilustra el almacenamiento de las instancias en el modelo físico 1.

Figura 9. Modelo físico 1.

2.- Modelo físico 2:

La figura 8 ilustra el almacenamiento de las instancias en este modelo.

3.- Modelo físico 3:

La figura 10 presenta el posicionamiento de las instancias para este modelo.

Figura 10. Ejemplo correspondiente al modelo 3.

4.- Modelo físico 4:

oid

nombreTipo

tamaño

habitat

nombre

tipoDentadura

001

002

003

004

005

006

007

008

009

010

águila

rana

zorro

bisonte

gato

langosta

perro

coral

ballena

cachalote

nulo

nulo

1.0

1.9

0.4

nulo

1.0

nulo

30.0

18.0

nulo

nulo

nulo

nulo

nulo

costa

nulo

tropical

oceano

tropical

nulo

nulo

nulo

nulo

Kiti

nulo

Nerón

nulo

nulo

nulo

nulo

nulo

nulo

nulo

nulo

nulo

nulo

nulo

láminas córneas

dientes

5.- Modelo físico 5:

ObjectId

denota

01

02

03

04

05

06

07

08

09

10

11

12

ANIMAL

MAMIFERO

ANIMARINO

CÉTACEO

MASCOTA

nombreTipo

tamaño

habitat

tipoDentadura

nombre

identificadorInstancia

cualquierCadena

MinClase(05008, 05)

Valor(05008, 06, 12001)

Valor(05008, 07, 0.4)

Valor(05008, 10, 12002)

String(12001, "gato")

String(12002, "Kiti")

Programa