Duda sobre costos

Duda sobre costos

de Eduardo David Gastelu Leivas -
Número de respuestas: 5

¿Si en un aggregate pipeline al documento tipo 'A', hago un lookup y unwind con el documento tipo 'B' y en project quiero acceder al item 'B.item', el 'B.item' lleva un costo de 0.01, 0.02 o 1.01? ¿Y si tuviera dentro del documento tipo 'A', al subdocumento tipo 'B', en project al buscar 'B.item' el costo será de 0.01, 0.02 o 1.01? Me aventuro que en el primer caso será 1.01 y en el segundo caso será de 0.01, pero no lo digo con seguridad y me gustaría aclararmelo. Entiendo que el costo de acceder a un documento es 1 y a un atributo del documento es 0.01.

Gracias.

En respuesta a Eduardo David Gastelu Leivas

Re: Duda sobre costos

de Eduardo David Gastelu Leivas -
¿Acceder a un documento un subdocumento lleva costo 1 o costo 2?
En respuesta a Eduardo David Gastelu Leivas

Re: Duda sobre costos

de Santiago Guridi Barreto -
Buena pregunta, yo estuve pensando al rededor de esto hoy y este fue mi razonamiento:

Mi entendimiento del comentario de Martin en este thread es que los costos se calculan sumando el costo de cada stage. Entonces para esta consulta vos necesitas un lookup, un unwind y un project.
- El costo del lookup con B es 1 por acceder a B.
- El costo del unwind de B es el costo de acceder a B y luego a cada atributo de B: 1 + 0.01 * cant_atributos_B
- El costo del project es 0.01.
El costo total sería la suma de todo eso.

Quizás Martín o Lorena pueden confirmar si mi razonamiento es correcto o no porque no estoy del todo seguro pero así lo pensé yo
En respuesta a Eduardo David Gastelu Leivas

Re: Duda sobre costos

de Martin Giachino -
Espero con esto responder a tus dos consultas.

La idea es que si se buscan documentos en colecciones diferentes (asumo que A y B estan en diferentes colecciones porque hablas de lookup) eso tendrá costo 1 para un _id específico o puede ser mas si no hay índices. Luego, si accedes a algún campo o lo que sea que está ya embebido dentro del documento será un acceso de costo "barato" porque ya está en memoria.

respecto a tu segunda pregunta, si trabajas con documentos embebidos, eso debería ser un acceso rápido, ya que difiere de acceder como en el DD1 en donde la unica forma de cruzar datos es siguiendo campos y haciendo lookups sobre colecciones distintas.

Martín
En respuesta a Martin Giachino

Re: Duda sobre costos

de Bruno Bianchi Gallo -
Buenas, nosotros a partir de la letra interpretamos que:
- el costo de un $lookup en la colección A, por id, es igual al tamaño de A (tengo q visitar c/doc a ver si cumple la condición, cada acceso con costo 1)
- el costo de un $lookup en la colección A, por un campo no id, es igual a: (tamaño de A / 2) * tamaño de A (idem anterior, pero cada acceso cuesta en promedio tamaño de A / 2).
En cada stage de $lookup sumamos eso como costo, y luego los eventuales $group, $sort, $proyect.

En un DD2, siguiendo las recomendaciones de diseño generales, seguramente se tengan muchas más relaciones embebidas y no referenciadas. En las consultas se reduce la cantidad de $lookups necesarios para obtener lo datos (que es lo que las hace costosas).