Você está na página 1de 5

Pontificia Universidad Catolica de Chile

Escuela de Ingeniera
Departamento de Ciencias de la Computacion

IIC2413 Bases de Datos

Gua I3

1. Resumen
El principal costo en la base de datos es la lectura a disco, es lo que quiero minimizar.
Tiempo de total de lectura en disco es Tiempo de busqueda + Delay Rotacional + Tasa de transferencia.
En ndices, Search Key es el parametro a buscar, Data Entry es la informacion almacenada.
Clustered Index es un ndice que esta ordenado de la misma forma que los records en la DB, Clustered
File es un ndice en que el data entry contiene el record, Unclustered Index ndice que no es clustered.
|DataEntries|
El costo en I/O del Hash Index es: BN . B es el numero de records por pagina, N el numero de
paginas.
El costo de I/O del B+ Tree es: O(log B ( 2T uplas
B )).
2

El costo de I/O del External Merge Sort optimizado es: 4N asumiendo un buffer optimo de tamano B N.
N es el numero de paginas de la tabla a ordenar.
El costo de I/O del Block Nested Loop Join es: Costo(R) + (P ags(R)/Buf f er)Costo(S).
Un schedule es serializable si el grafo de precedencia es acclico.

2. Ejercicios Ayudanta
2.1. Preguntas breves
En que momento me conviene usar un hash index? En que momento me conviene usar un B+ Tree?
Explique el algoritmo de External Merge Sort normal y optimizado.
Defina las propiedades ACID.
Defina un caso en el que le convenga usar MongoDB y otro en el que no.

2.2. Problemas
Problema 1) Considere un disco con un sector de tamano 512 bytes, 2000 tracks por superficie y 50 sectores por
track, cinco platos de doble lado y un tiempo promedio de busqueda de 10 msec.

1. Cual es tu capacidad de un track en bytes? Cual es la capacidad de cada superficie? Cual es la capacidad
del disco?

1
2. Cuantos cilindros tiene el disco?
3. De ejemplos de tamanos validos de bloques. Pueden ser de 256? De 2048? De 51200?
4. Si los platos del disco rotan a 5400 rpm, Cual es el maximo delay rotacional ?
5. Si un track de datos puede ser transferido por revolucion, Cual es la tasa de transferencia?

Problema 2) Sea la relacion R(a, b, c, d) cuyo tamano es de 1 millon de tuplas, en que cada pagina contiene en
promedio P records (cercano a 10). Los records de R estan ordenados de manera aleatoria (cuando no hay ndice). El
atributo a es ademas un candidato a llave primaria, cuyos valores van del 0 al 999.999 (distribudos uniformemente).
Para cada una de las consultas a continuacion, diga el numero de I/O que se haran en cada uno de los siguientes casos:

Analizar R sin ningun ndice.


Usar un B+Tree clustered sobre el atributo a. El arbol es de altura h.
Usar un Hash Index Unclustered con 1 millon de buckets. Caben M search key por pagina.

Las consultas son:

1. Encontrar todas las tuplas de R.


2. Encontrar todas las tuplas de R tal que a < 50.
3. Encontrar todas las tuplas de R tal que a = 50.
4. Encontrar todas las tuplas de R tal que a > 50 y a < 100.

Problema 3) Suponga que tiene una relacion Personas(id, nombre, edad). La llave primaria esta indexada con
un B+Tree clustered de altura h y con las hojas ocupadas al 100 %. La relaccion tiene 500.000 tuplas y caben 100
por pagina. Se pide que indique:

Numero de fases y costo en I/O de para la consulta SELECT * FROM Personas ORDER BY edad.
Costo en I/O de la consulta SELECT * FROM Personas ORDER BY id.

Si utiliza External Merge Sort, puede usar la version optimizada. Asuma buffer suficientemente grande. Comente
sus resultados.

Problema 4) Sea el schedule del cuadro 1, determine si es Conflict Serializable. Que pasa si se estuviera utilizando
Strict 2PL?

Problema 5) Piense en una base de datos en MongoDB con dos colecciones, una de personas y otra de mascotas:

// Personas
{
"uid": 1,
"name": "Florencia Barrios",
"age": 21
}

2
T1 T2 T3 T4
W(a)
R(b)
R(b)
W(b)
R(b)
W(a)

Cuadro 1: My caption

// Mascotas
{
"mid": 1,
"uid": 1,
"name": "Dinky",
"type": "Perro"
}

Entregue una consulta en MongoDB que imprima el nombre de todas las personas mayores de 18 anos junto a todas
sus mascotas. Asuma que una Persona puede tener mas de una Mascota.

3. Ejercicios Propuestos
3.1. Preguntas breves
Discuta el caso de uso de las bases de datos columnares.
Explique la diferencia entre un Clustered y un Unclustered Index. Puede existir un Unclustered Index que
sea un Clustered File? Cual es la ventaja en I/O de un Clustered File?
Como cambia el costo en I/O del External Merge Sort si no se escribe el ultimo resultado (se imprime
directo)?

3.2. Problemas
Problema 1) Piense en una base de datos en MongoDB con dos colecciones, una de personas y otra de compras:

// Personas
{
"uid": 1,
"name": "Florencia Barrios",
"edad": 21
}

// Compra
{
"cid": 1,
"uid": 1,
"fecha": "10-09-2016",
"compras": [
{

3
"producto": "Palo de Hockey",
"valor": 20000
},
{
"producto": "Cafe con leche",
"valor": 1000
}
]
}

Entregue una consulta en MongoDB que imprima el nombre de todas las personas junto al total gastado por ellos.
Ojo que cada persona puede tener mas de un documento de Compras.

Problema 2) Piense en una base de datos en MongoDB con dos colecciones, una de autores y otra de cuentos:

// Personas
{
"uid": 1,
"name": "Gabriel Garca Marquez",
}

// Cuentos
{
"mid": 1,
"uid": 1,
"cuento": "El rastro de su sangre en la nieve",
"type": "Realismo Magico",
"content": "... El medico no le dio la importancia que Billy Sanchez esperaba.
Hizo bien en decrmelo, dijo, y se fue detras de la camilla... "
}

Entregue una serie de pasos relacionados a MongoDB para obtener todos los autores de cuentos de tipo Realismo
Magico que en su contenido mencionan la palabra Soledad pero no la frase Cien Anos. Dado que la base de
datos es muy grande, debe usar busqueda por texto. En concreto debe crear un ndice, entregar la consulta de
busqueda por texto y luego hacer el join segun lo visto en clases.

Problema 3) Considere un esquema de dos tablas A(id int, name varchar(10)) y B(id int, name varchar(10)).
Suponga que quiere hacer la consulta en algebra relacional A.name,B.name (A ./ B) pero solamente dispone de un
archivo que se ve de la siguiente forma:

A,1,palabra1
A,2,palabra2
A,3,palabra3
B,1,palabra1
...

El primer termino antes de la coma representa la tabla, el segundo el id y el tercero el name. Entregue un algoritmo
Map - Reduce que ejecute la consulta deseada.

Problema 4) En clases se vio que el costo en I/O del Block Nested Loop Join es de Costo(R)+(P ags(R)/Buf f er)Costo(S).
Existen otros algoritmos de join que pueden hacer usos de ndices sobre las bases de datos. Entregue un algoritmo

4
usando la interfaz de iterador lineal vista en clases que compute el join R ./ S entre R(a, b) y S(a, c) en el que
ambas llaves primarias estan indexadas por un B+Tree clustered. Entregue el costo estimado en I/O (debera ser
mejor que el costo del Block Nested Loop Join). Hint: El B+Tree mantiene la relacion ordenada.

Você também pode gostar