Lab 02. Indexación en MongoDB#
Manuel Torres
Bases de datos a gran escala. Máster en Ingeniería Informática. Universidad de Almería
En este laboratorio se practica con el manejo de índices en MongoDB y con la importación de datos. Se practicará con los creación de índices para la mejora del rendimiento, el uso de la explicación de resultados y el uso de índices espaciales.
Objetivos
Importar datos en una base de datos.
Realizar operaciones de manejo de índices.
Utilizar y comprender la información devuelta por la explicación de resultados.
Realizar operaciones de manejo de índices espaciales.
Prerrequisitos
Tener configurado el entorno de desarrollo de la asignatura.
Recursos#
Puedes obtener más información sobre cómo trabajar con MongoDB siguiendo estos tutoriales:
Actividades#
Importar el archivo JSON
zips.json
disponible en la carpeta SampleDatabases en una colecciónzips
dentro de una base de datos denominadazips
.Obtener cuántos índices hay definidos y cuáles son los nombres de los índices
Crear una consulta que recupere los documentos del estado
AL
¿Cuántos documentos devuelve la consulta?
¿Cuántos elementos del índice son leídos para ejecutar la consulta?
¿Cuántos documentos son leídos de la base de datos?
Definir un índice ascendente sobre el campo
state
. Volver a recuperar los documentos del estadoAL
.¿Cuántos documentos devuelve la consulta?
¿Cuántos elementos del índice son leídos para ejecutar la consulta?
¿Cuántos documentos son leídos de la base de datos?
Definir dos índices: uno para
city
y otro parapop
. ¿Cuántos índices hay definidos?Crear una consulta para obtener todos los documentos de códigos postales con una población superior a 100.000 habitantes.
¿Cuántos documentos devuelve la consulta?
¿Cuántos elementos del índice son leídos para ejecutar la consulta?
¿Cuántos documentos son leídos de la base de datos?
Definir un índice espacial 2d para el campo
loc
. Escribir una consulta que recupere los tres documentos de códigos postales más cercanos a las coordenadas[-86.51, 33.58]
.Resultado:
{ "city" : "ACMAR", "loc" : [ -86.51557, 33.584132 ], "pop" : 6055, "state" : "AL", "_id" : "35004" } { "city" : "LEEDS", "loc" : [ -86.574824, 33.528333 ], "pop" : 10421, "state" : "AL", "_id" : "35094" } { "city" : "VANDIVER", "loc" : [ -86.501278, 33.480704 ], "pop" : 1066, "state" : "AL", "_id" : "35176" }
Crear un índice compuesto para
city
ypop
. Crear una consulta que recupere sólo la población de documentos del estadoNY
y con una población superior a 80.000 habitantes.¿Cuántos documentos devuelve la consulta?
¿Cuántas entradas del índice analiza la consulta?
¿Es posible resolver la consulta usando sólo el índice?
En la colección
bios
de la base de datostest
, definir un índice disperso sobre el campoaka
del camponame
.Crear una consulta que devuelva los documentos de galardonados con premios que hayan sido otorgados por organizaciones que contengan la palabra
Free
.Resultado:
{ "_id" : 6, "name" : { "first" : "Guido", "last" : "van Rossum" }, … } { "_id" : 8, "name" : { "first" : "Yukihiro", "aka" : "Matz", "last" : "Matsumoto" }, … }
Modificar la consulta anterior para que muestre los resultados ordenados por el campo
aka
dename
Resultado:
{ "_id" : 8, "name" : { "first" : "Yukihiro", "aka" : "Matz", "last" : "Matsumoto" }, … }
¿Por qué la consulta del apartado b devuelve menos documentos que la del apartado a?
Crear un índice en la colección
bios
de la base de datostest
sobre el campoaward
del campoawards
. Crear una consulta que devuelva los documentos de celebridades que hayan obtenido el premio (award)Turing Award
.
Resultado:
{ "_id" : 1, "name" : { "first" : "John", "last" : "Backus" }, … }
{ "_id" : 2, "name" : { "first" : "John", "last" : "McCarthy" }, … }
{ "_id" : 7, "name" : { "first" : "Dennis", "last" : "Ritchie" }, … }
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" }, … }
{ "_id" : 4, "name" : { "first" : "Kristen", "last" : "Nygaard" }, … }
¿Se usa el índice definido para resolver la consulta?
¿Cuántas entradas del índice analiza la consulta?
¿Es posible resolver la consulta usando sólo el índice?