none
DocumentDB. Joins entre colecciones. RRS feed

  • Pregunta

  • No tengo experiencia en la filosofía NoSQL pero sé que difiere totalmente del modelo relacional, fundamentalmente en la desnormalización de la información.

    Pongo el ejemplo de BD tradicional con 4 tablas, clientes, artículos, pedidos y líneas de pedidos.

    Por no extenderme, no voy a explicar la relación entre ellas porque son muy evidentes.

    Puedo entender que en un modelo NoSQL, como resultado de una consulta se pueda obtener un resultado de pedido como:

    {

      "id":"xxx",

      "total":300,

      "cliente":

          {

               "nombre":"cliente1",

               "....":"....."

          },

          "productos":

          [

            {

              "denominación":"producto1",

              "precio":100,

              "cantidad",3

              "....":"....."

             }

           ]

    }

    Lo que no puedo entender es que se almacene así, porque sería muy poco optimo.

    ¿Es que el ejemplo opuesto no debería plantearse nunca en NoSQL?

    ¿No se puede tener lo mejor de los dos mundos?

    ¿No se pueden hacer joins entre distintas colecciones?


    <a href="http://about.me/eustaquio">Eustaquio Martin</a>

    sábado, 23 de agosto de 2014 9:35

Respuestas

  • >>Lo que no puedo entender es que se almacene así, porque sería muy poco optimo.

    porque dices que es poco optimo ? recuerda que nosql apunta a millones de registros, si los pruebas con 100 o 200 no vas a encontrar diferencia, pero trata de procesar 50millones y despues me dices quien es mas optmo

    justamente relacionar tablas con join es lo poco optimo en cuanto acceso, nunca analizaste un plan de eejcucion de sql server? alli veras cuanto recurso se va en la eejcucion de una query al unir dos tablas

    >>¿Es que el ejemplo opuesto no debería plantearse nunca en NoSQL?

    no entendi la pregunta

    >>¿No se puede tener lo mejor de los dos mundos?

    me temo que por ahora no, por lo general cuando mezclas no se obtiene nada bueno, porque te quedas en medio y no es bueno ni para una cosa ni para otra

    >>¿No se pueden hacer joins entre distintas colecciones?

    hasta donde se la idea es evitarlas, si las necesitas quizas te estes equivocando en la decision que has tomado para implementar la persistencia y necesitas usar Sql Azure

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 23 de agosto de 2014 11:54

Todas las respuestas

  • >>Lo que no puedo entender es que se almacene así, porque sería muy poco optimo.

    porque dices que es poco optimo ? recuerda que nosql apunta a millones de registros, si los pruebas con 100 o 200 no vas a encontrar diferencia, pero trata de procesar 50millones y despues me dices quien es mas optmo

    justamente relacionar tablas con join es lo poco optimo en cuanto acceso, nunca analizaste un plan de eejcucion de sql server? alli veras cuanto recurso se va en la eejcucion de una query al unir dos tablas

    >>¿Es que el ejemplo opuesto no debería plantearse nunca en NoSQL?

    no entendi la pregunta

    >>¿No se puede tener lo mejor de los dos mundos?

    me temo que por ahora no, por lo general cuando mezclas no se obtiene nada bueno, porque te quedas en medio y no es bueno ni para una cosa ni para otra

    >>¿No se pueden hacer joins entre distintas colecciones?

    hasta donde se la idea es evitarlas, si las necesitas quizas te estes equivocando en la decision que has tomado para implementar la persistencia y necesitas usar Sql Azure

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 23 de agosto de 2014 11:54
  • Muchas gracias por tu respuesta.

    Quisiera aclarar mejor ciertos conceptos que no he sabido explicar, probablemente debido a mi desconocimiento del concepto NoSQL.

    Digo "poco optimo" al hecho de tener que repetir la información. Por ejemplo en un sistema relacional, puedo tener una "ficha" de producto con toda su información, y en cada línea de pedido simplemente incluyo el identificador del producto acompañado de la información del pedido (unidades, precio, etc).

    ¿Cómo debe tratarse eso en un sistema NoSQL? ¿Es que hay que repetir toda la información de un producto en cada línea de producto? ¿y si luego tengo facturas con sus correspondientes líneas de facturas?

    Disculpa, si insisto con mi mente cuadriculada en el sistema relacional, pero es que aún no veo cómo se debería estructurar la información en un sistema NoSQL


    <a href="http://about.me/eustaquio">Eustaquio Martin</a>

    sábado, 23 de agosto de 2014 15:00
  • Hola Eustaquio,

    Es un gusto tenerte por acá, para que te ayudemos de una forma más rápida, debemos primero establecer un canal de comunicación privada contigo. Esto nos ayudará también en la recopilación de información más detallada sobre este problema técnico. Podrías por favor enviarnos un correo electrónico a la siguiente dirección con sus datos de contacto nombre completo, dirección de correo electrónico y número de teléfono para que nos comuniquemos contigo a la brevedad.

    ¿Has resuelto tu consulta Eustaquio? Seguimos en espera de tu correo.

    Estuvimos esperando algún mensaje tuyo pero no recibimos ninguna respuesta tuya. Por el momento daremos este hilo como cerrado. Si tienes algún inconveniente solo desmarca la respuesta y déjanoslo saber.

    Saludos,

    Miguel      

    MSDN/TechNet Soporte Comunidades

    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.
    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.




    martes, 26 de agosto de 2014 19:08
    Moderador
  • ¿Qué dirección por favor?

    <a href="http://about.me/eustaquio">Eustaquio Martin</a>

    lunes, 15 de septiembre de 2014 9:03