Dudas sobre costos

Dudas sobre costos

de Brian Britos Simmari -
Número de respuestas: 8

Buenas tardes, junto a mi compañero estamos teniendo problemas para entender los costos de las consultas. Dejo a continuación lo que entendimos y agradecemos si alguién puede confimar que vamos por buen camino:

Costo 5) Ejemplo: select prod_id  from productos   where color="azul" 

 Costo: Acá color no es una clave, por lo que tengo que recorrer toda la colección para poder encontrar cuales cumplen el where. Costo: la mitad del tamaño de la colección (además del costo por traer atributos)


Costo 4) Ejemplo: Si sabemos los prod_id de los productos azules, podemos consultar: 

select prod_id from produtos where prod_id in (".....") 

Costo: Acá accedemos por la clave, por lo que el costo será la cantidad de claves que tenemos dentro del in ("...").


Costo 7) Ejemplo:

select prod_id, f.fabricante_id  from productos  join fabricante as f on producto.fabricante_id = f.fabricante_id where color="azul"

   

Costo: En el join, cada producto tiene un único fabricante, por lo que, dado un producto tengo que ir a la colección fabricante y traer el documento accediendo por la clave de fabricante, entonces el costo del join es la cantidad de productos que tengo. (1 unidad por cada producto al cual tengo que ir a buscar al fabricante (* ver nota)). Luego accedo a la colección productos mediante el color que no es clave, el costo de esto es la mitad del tamaño de la colección. 


* Qué pasa si el producto tiene fabricante_id = null? Entendemos que en este caso no se realiza la consulta del documento a la tabla Fabricante por lo que no se computa el costo +1 por esa búsqueda por fabricante_id. 


Saludos.

En respuesta a Brian Britos Simmari

Re: Dudas sobre costos

de Franco Enrique Fontana -

Hola, nosotros estamos también con dificultades para interpretar la estimación de costos que se nos propone en la sección 5 del Lab.

Dejamos abierto un hilo con las dudas (https://eva.fing.edu.uy/mod/forum/discuss.php?d=265121) y justo ayer le comenté a Lorena si no podían aclarar el tema y poner un ejemplito.

Respecto a lo que vos planteás, si no te malinterpreto, estás calculando costos sobre las SQL's, me parece que la idea es hacer el cálculo de costos sobre las agregaciones que escribimos en MongoDB. Fijate lo que dice el primer párrafo de la sección 5:

"En este apartado se enumerarán algunos costos referentes a las operaciones involucradas en las consultas sobre el motor documental, para poder cuantificar el costo de ejecutarlas y en base a eso tomar decisiones para mejorar el desempeño y la carga general del sistema."

Saludos

En respuesta a Franco Enrique Fontana

Re: Dudas sobre costos

de Juan Carlos Pellegrini Benitez -
Hola Franco, gracias por responder (soy el compañero de equipo de Brian). Nosotros también entendimos que el cálculo de costos es para las consultas realizadas con MongoDB, pero, al ser la DD1 análoga en estructura a la relacional ya que en una colección se utilizan referencias a otras colecciones, entendemos que el cálculo sería el mismo.
Tal vez quedó un poco confusa nuestra pregunta ya que pusimos consultas en sql pero en realidad hablamos de esas mismas consultas traducidas al lenguaje de mongoDB.
En respuesta a Juan Carlos Pellegrini Benitez

Re: Dudas sobre costos

de Franco Enrique Fontana -

Hola Juan Carlos, entiendo lo que decís, pero me parece (puedo equivocarme!) que en nuestro caso no es lo mismo evaluar las SQL de la base relacional que las agregaciones de MongoDB. Te digo porqué, me tomé el trabajo de ejecutar los scripts de creación de la base MySQL para tenerla como referencia y revisar la estructura. Mirando la MySql existen índices creados, que no están en la base MongoDB que nos dieron. Sin duda, eso afecta los costos de ejecución. Te dejo abajo en los adjuntos una capturas de pantalla de lo que veo de los índices, por ejemplo para la tabla film en MySql y la colección film en MongoDB.

Aparte de eso, seguimos con las dudas del hilo: https://eva.fing.edu.uy/mod/forum/discuss.php?d=265121

Estaría bueno que los profes aclaren todos estos temas.

Si tenés más info de este tema, bienvenida.

Adjunto MongoDBIndex.png
Adjunto MySqlIndex.png
En respuesta a Franco Enrique Fontana

Re: Dudas sobre costos

de Bruno Alberto Szilagyi Ibarra -
Para mi es como comenta el compañero, se espera que hagamos el cálculo sobre las operaciones del motor de BD documental de Mongo.
En la documentación (https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/#equality-match-with-a-single-join-condition) está como se traduce un $lookup a un pseudo-algoritmo.
Voy a intentar aplicar eso para calcular el costo.
En respuesta a Bruno Alberto Szilagyi Ibarra

Re: Dudas sobre costos

de Martin Giachino -
Hola a todos y disculpen la demora en las respuestas, por algún extraño motivo lorena y yo no quedamos suscritos al foro :(

- Las estimaciones de cálculos efectivamente son sobre la base documental, no la relacional.

- Efectivamente sakila tiene índices que DD1 no tiene, así que si miran sakila les dará algo no representativo. Igualmente si investigan cómo crear y usar índices en mongo y lo documentan correctamente, eso sí estaría bien. La letra de hecho lo dice "Puede generar todos los indices (o similar) que considere necesario"

-
En respuesta a Brian Britos Simmari

Re: Dudas sobre costos

de Martin Giachino -
Respecto a las dudas originales:

------------------------------
Costo 5) Ejemplo: select prod_id from productos where color="azul"

Costo: Acá color no es una clave, por lo que tengo que recorrer toda la colección para poder encontrar cuales cumplen el where. Costo: la mitad del tamaño de la colección (además del costo por traer atributos)

**** Respuesta
No es correcto, te cuesta recorrerla toda, ya que al no tener índices debes ir uno por uno y verificar si es azul o no.


----------------------------------------
Costo 4) Ejemplo: Si sabemos los prod_id de los productos azules, podemos consultar:
select prod_id from produtos where prod_id in (".....")
Costo: Acá accedemos por la clave, por lo que el costo será la cantidad de claves que tenemos dentro del in ("...").

**** Respuesta
Si tuvieras esos índices creados, es correcto porque accederías directamente solo a los objetos que cumplen con el criterio y nunca recorrerías los que no lo cumplen.


---------------------------------
Costo 7) Ejemplo: select prod_id, f.fabricante_id from productos join fabricante as f on producto.fabricante_id = f.fabricante_id where color="azul"

Costo: En el join, cada producto tiene un único fabricante, por lo que, dado un producto tengo que ir a la colección fabricante y traer el documento accediendo por la clave de fabricante, entonces el costo del join es la cantidad de productos que tengo. (1 unidad por cada producto al cual tengo que ir a buscar al fabricante (* ver nota)). Luego accedo a la colección productos mediante el color que no es clave, el costo de esto es la mitad del tamaño de la colección.

* Qué pasa si el producto tiene fabricante_id = null? Entendemos que en este caso no se realiza la consulta del documento a la tabla Fabricante por lo que no se computa el costo +1 por esa búsqueda por fabricante_id.

**** Respuesta
Correcto, si accedo por una PK o índice único el costo de acceso a un fabricante dado sería 1. Tambiér sería correcto que acceder a los productos de ese fabricante es uno por cada producto. Pero lo del color como dijimos antes no es correcto, porque se deben recorrer todos los documentos igual (en este punto hablamos de los que tenemos en este punto del pipeline).

El caso de fabricante_id = null no es algo muy relevante al caso de estudio.
En respuesta a Martin Giachino

Re: Dudas sobre costos

de Brian Britos Simmari -
Buen día Martín, espero que estes bien. Te hago otra consulta sobre el punto 5.

Entendemos que hay que recorrer toda la colección para ir "probando" la condición de where, pero ¿el costo de acceder a cada documento que cumpla el where no sería la mitad de la colección? Por que estámos accediendo por un atributo que no es un indice (el color).
En respuesta a Brian Britos Simmari

Re: Dudas sobre costos

de Martin Giachino -
Si el mongo ya sabe que debe acceder a todos los documentos, el razonable que utilice su índice implícito por _id para acceder a cada elemento con costo 1, es decir que va uno por uno y cuando recupera uno chequea si el color es azul, obviamente estamos hablando de que no hay índices extras. En este caso el objeto ya lo tenés y sabés si es azul o no, y por ende si queda para la siguiente etapa del pipeline.

Martín