relacional - sql vs nosql
Unirse a la operaciĆ³n con NOSQL (4)
He revisado algunos artículos sobre Bigtable y NOSQL. Es muy interesante que eviten las operaciones de JOIN.
Como ejemplo básico, tomemos la tabla Empleado y Departamento y supongamos que la información se distribuye en varias tablas / servidores.
Solo quiero saber si los datos se distribuyen en varios servidores, ¿cómo hacemos las operaciones JOIN o UNION?
Cuando tiene datos extremadamente grandes, es probable que desee evitar uniones. Esto se debe a que la sobrecarga de una búsqueda de clave individual es relativamente grande (el servicio necesita averiguar qué nodo (s) consultar y consultarlos en paralelo y esperar respuestas). Por sobrecarga, quiero decir latencia, no limitación de rendimiento.
Esto hace que las uniones realmente mal, ya que necesitarías hacer muchas búsquedas de claves externas, que terminarían yendo a muchos, muchos nodos diferentes (en muchos casos). Entonces querrías evitar esto como un patrón.
Si no ocurre muy a menudo, probablemente puedas recibir el golpe, pero si vas a querer hacer muchos de ellos, valdría la pena "desnormalizar" los datos.
El tipo de cosas que se almacenan en las tiendas NoSQL suele ser bastante "anormal" en primer lugar. No es raro duplicar los mismos datos en todo tipo de lugares diferentes para facilitar las búsquedas.
Además, la mayoría de los nosql no soportan (realmente) índices secundarios, lo que significa que tiene que duplicar cosas si desea consultar por cualquier otro criterio.
Si está almacenando datos como empleados y departamentos, realmente está mejor con una base de datos convencional.
Kaleb tiene razón. Usted escribe código personalizado con una solución NoSQL si sus datos no encajan bien en una tienda de valores-clave. El procesamiento Map-reduce / async y las memorias caché personalizadas son comunes. Brian Aker hizo una presentación muy divertida (y satírica y tendenciosa) en el OpenSQLCamp de noviembre de 2009 http://www.youtube.com/watch?v=LhnGarRsKnA . Saltee en 40 segundos para escuchar acerca de las uniones.
Sé que esta es una vieja pregunta, pero es un resultado superior en Google, por lo que podría valer la pena decir que Couchbase, aunque es una base de datos "NoSQL", tiene una implementación SQL llamada N1QL , que sí tiene joins . Y pueden ser bastante performant en ciertas circunstancias.
Tendría que hacer múltiples selecciones y unir los datos manualmente en su aplicación. Vea esta publicación SO para más información. De esa publicación:
Los conjuntos de datos de Bigtable se pueden consultar desde servicios como AppEngine utilizando un lenguaje llamado GQL ("gee-kwal") que se basa en un subconjunto de SQL. Perceptiblemente ausente de GQL es cualquier tipo de comando JOIN. Debido a la naturaleza distribuida de una base de datos de Bigtable, realizar una unión entre dos tablas sería terriblemente ineficiente. En cambio, el programador tiene que implementar dicha lógica en su aplicación o diseñar su aplicación para no necesitarla.