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.jsondisponible en la carpeta SampleDatabases en una colecciónzipsdentro 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
cityy 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
cityypop. Crear una consulta que recupere sólo la población de documentos del estadoNYy 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
biosde la base de datostest, definir un índice disperso sobre el campoakadel 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
akadenameResultado:
{ "_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
biosde la base de datostestsobre el campoawarddel 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?