¿Hay algo innovador sobre NoSQL? [cerrado]

46

Soy un tipo de base de datos relacional muy sólido y entiendo todo el camino hasta la tercera forma normal, aprecio las raíces de la teoría de conjuntos algebraicos de SQL y probablemente pueda relacionalizar un corazón roto (o no).

No he descubierto una estructura de base de datos relacional PARA las noches de citas con mi esposa, pero HE pensado en proyectos de bases de datos relacionales para las noches de citas con mi esposa.

Ahora estoy escuchando sobre NoSQL e investigándolo. Para ir al grano, ¿hay algo sobre NoSQL que sea innovador, matemáticamente novedoso o un "oye, realmente no necesitas organizar tus datos relacionalmente, este es un enfoque mucho más fácil"?

¿Es NoSQL como un super shell para la estructura de datos? En mi opinión, los datos deben tener una estructura para ser recuperados y la recuperación debe definirse en un lenguaje de algún tipo.

Samuel Fullman
fuente
2
¿Qué tipos de bases de datos NoSQL no tienen una estructura? Las bases de datos de documentos pueden ser jerárquicas, pero almacenan mínimamente sus datos en documentos que contienen los datos en algún formato. Las bases de datos de gráficos y las tiendas de valores clave se explican por sí mismas. ¿Qué bases de datos NoSQL no tienen un lenguaje para consultar? Algunas bases de datos de documentos son simplemente búsquedas textuales o XQuery para XML, como dos ejemplos. SPARQL se utiliza para tiendas RDF.
Thomas Owens
2
Actualización para "HE PENSADO en proyectos de bases de datos relacionales en noches de citas con mi esposa .." :) LOL. Buena pregunta también.
Rocklan
2
Las bases de datos NoSQL tienen estructura, pero la estructura no siempre es fácil de asignar al álgebra relacional. Diferentes NoSQL utilizan diferentes estructuras, algunos son hashmap de valores clave, jerárquicos, la base de datos de objetos, la base de datos de gráficos o el almacén de documentos son tipos comunes de NoSQL. Todo lo que NoSQL realmente es es la comprensión de que SQL no es una panacea, que algunos dominios problemáticos se asignan mal al SQL / álgebra relacional.
Mentira Ryan
77
NoSQL es un nombre engañoso. Implica un grupo con características, mientras que la única característica común es no ser una base de datos SQL relacional clásica. Es un conjunto abierto. Es como describir cada alimento que no es pan como la "familia de los no panes".
Pieter B
2
Ok, ¿cuál es el gran alboroto sobre NoSQL? Es fácil: tuvimos una generación de personas que crecieron con bases de datos relacionales y esa fue la única herramienta que tenían. Porque si solo tienes un martillo, todo se convierte en un clavo. Luego obtienes cosas feas como intentar poner objetos en una base de datos relacional o construir un motor de búsqueda además de eso. La gran conclusión fue que: una base de datos SQL es buena para muchas cosas, pero no para todo. el "no todo" es la gran cosa.
Pieter B

Respuestas:

24

NoSQL es más evolutivo que revolucionario. Básicamente combina las ideas existentes de "almacenamiento de bases de datos externas" con "el uso de estructuras de datos familiares, no tablas relacionales".

Hay más tipos de bases de datos que relacionales, por ejemplo , bases de datos jerárquicas . Si bien es arcaico para los estándares actuales, encaja muy bien con las estructuras de datos de sus datos (por ejemplo, registros COBOL ). El punto es que los datos en la base de datos se modelaron de cerca a la forma en que se presentaron los registros en los lenguajes de programación que los usaron.

Avancemos rápidamente a la invención de bases de datos relacionales , donde finalmente la base de datos separó las preocupaciones y, cuando se normalizó adecuadamente, es una excelente manera de visualizar la mayoría de los tipos de datos y las relaciones entre los datos. Es realmente fácil de entender en comparación con otros tipos de bases de datos. Sin embargo, lo que falla es almacenar datos de una manera que refleje objetos y clases en un programa. Por lo tanto, la invención del mapeo objeto-relacional . En otras palabras, el diseño de la base de datos es en realidad un obstáculo para el diseño del programa que lo utiliza, por lo que necesitamos bibliotecas ORM como Hibernate. Si bien es limpio y consistente, siempre hay esa persistente duda en el fondo de mi mente de que algo no está del todo bien.

Esto dio lugar a dos tipos más de bases de datos, bases de datos de objetos y NoSQL .

Ambos intentan resolver los problemas introducidos por las bases de datos relacionales sin exponernos a los horrores alucinantes de las bases de datos jerárquicas. Los datos todavía se presentan en repositorios que se asemejan vagamente a tablas, pero en realidad son más como estructuras de datos de programación que tablas relacionales. Si bien las bases de datos de objetos siguen principalmente reglas bien definidas, entiendo que NoSQL es bastante arbitrario. Por ejemplo, una tabla puede visualizarse como una tabla hash o una matriz. No existe una manera fácil y bien definida de consultarlos utilizando una herramienta arbitraria análoga a Oracle SQL Developer o SQL Server Management Studio .

La idea es que uno pueda definir estructuras de datos que se busquen fácilmente en el código, en lugar de juntar consultas SQL que se adapten mejor a un motor de base de datos SQL en lugar de expresar la consulta que uno desea. Por ejemplo, las coincidencias difusas o parciales son más difíciles y funcionan peor en una base de datos relacional, mientras que una base de datos NoSQL puede tener una estructura que está optimizada para dicha búsqueda y se completa en una fracción del tiempo.

Hay lenguajes para consultar NoSQL. Sin embargo, no existe un lenguaje universal como el SQL para las bases de datos relacionales.


Edición tardía:

Si bien estoy lo suficientemente familiarizado con las bases de datos NoSQL, esta pregunta fue el impulso para comprar un libro de calidad sobre el tema y comenzar a leerlo con el objetivo final de ser un verdadero experto en el tema. Los comentarios restantes se basan en NoSQL Distilled: una breve guía para el mundo emergente de la persistencia políglota por Pramod Sadalage y Martin Fowler .

Los autores afirman que las bases de datos relacionales no se adaptan bien a los clústeres capaces de servir los datos necesarios para sitios como Amazon y Google: NoSQL se desarrolló para ajustarse a este nicho, relajando la concurrencia y la durabilidad en ACID para atender un gran número de consultas que utiliza en gran medida datos estáticos (por lo tanto, las transacciones ACID no son tan importantes).

Además, afirman que las bases de datos NoSQL operan sin un esquema (página 10) que permite que las bases de datos NoSQL modifiquen la estructura de datos más fácilmente. No estoy seguro de que la presencia o ausencia de un esquema formal sea importante a este respecto, ya que las bases de datos SQL también permiten modificar esquemas. En cualquier caso, los dos autores de renombre hacen el reclamo, por lo que vale la pena examinarlo.

Creo que estos dos puntos principales sirven solo para imponer mi punto principal de que NoSQL es evolutivo, no revolucionario. Todavía almacenan datos y realizan mejoras incrementales en la escala y modificabilidad. También señalan que NoSQL no busca usurpar bases de datos relacionales como el rey del almacenamiento de datos, solo para proporcionar un medio alternativo de almacenamiento de datos para los tipos de datos que necesitan escalar y transformarse de una manera que (creen) relacional Las bases de datos no son lo suficientemente compatibles.


fuente
2
Algunas bases de datos NoSQL tienen un lenguaje de consulta. He usado XQuery y SPARQL antes, si los datos están almacenados en XML o RDF. Esos lenguajes tienden a ser estructurados y para consultas. Pero, de nuevo, eso solo cubre las bases de datos NoSQL que contienen formatos de datos bien definidos y no hacen mucho por los pares de texto o clave-valor.
Thomas Owens
@ThomasOwens Edité mi respuesta para ser más específico.
1
Esta es una descripción general interesante de NoSQL pero realmente no responde la pregunta real. Por lo que puedo decir, lo único "innovador" sobre NoSQL es que sus datos no necesitan ajustarse a una estructura específica antes de almacenarse.
Rocklan
2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...Tengo la sensación de que esto está poniendo el carro delante del caballo en muchos casos. Para las grandes empresas con grandes conjuntos de datos, los datos son increíblemente valiosos y estarán disponibles por mucho, mucho tiempo, más que los lenguajes, herramientas y paradigmas actuales de programación. Puede ser más exacto decir que OOP es un obstáculo para el diseño de la base de datos, y tratar de cambiar el diseño de la base de datos para que se ajuste al paradigma de programación puede no ser la mejor idea.
Doval
2
Solo señalaré que todos estamos usando una implementación de base de datos jerárquica bastante fuerte, se llama sistema de archivos.
Wyatt Barnett
13

Creo que definitivamente le gustaría ver este artículo de Erik Meijer y Gavin Bierman, titulado "Contrariamente a la creencia popular, SQL y NoSQL son en realidad solo dos caras de la misma moneda" . En resumen, afirma que matemáticamente hablando ambos enfoques se basan en la misma teoría, pero con algunas diferencias.

Un par de diferencias interesantes son, en mi opinión, las siguientes: la dirección de las dependencias de tipo cruzado (FK en SQL) es lo opuesto en SQL y NoSQL y el tipo de colecciones no se limita a establecer en NoSQL (y, por lo tanto, algunas operaciones teóricas de conjunto Es posible que ya no se aplique en el mundo NoSQL, pero algunos otros todavía son válidos). Otro punto interesante del artículo es el lenguaje de consulta único propuesto para consultar bases de datos SQL y NoSQL. Se llama LINQ, y si crees haber escuchado este nombre antes, estás en lo correcto: ese es el lenguaje de consulta de Microsoft de C #.

Haspemulator
fuente
1
"Otro punto interesante del artículo es el lenguaje de consulta único propuesto para consultar bases de datos SQL y NoSQL. Se llama LINQ", no del todo cierto, 'Linq' no es mapeable a SQL de una manera 1: 1, por lo que una traducción tiene que ocurrir para que funcione en bases de datos SQL. Lo que significa que se puede introducir cualquier cosa para consultar ambos, siempre que haya una capa de traducción que se asegure de que se ejecute en el DB de destino
Frans Bouma
66
Bueno, uno puede argumentar que SQL tampoco se ejecuta directamente en una base de datos. Lo que se ejecuta es un plan de ejecución, y también se puede argumentar que Linq podría traducirse directamente al plan de ejecución. Así que no hay gran diferencia después de todo.
Haspemulator
10

La respuesta de Snowman describe correctamente cómo SQL y NoSQL difieren en sus estructuras de datos y cómo se accede a ellas. Sin embargo, una diferencia probablemente aún más importante es su respectivo dominio del problema.

NoSQL no es un sucesor de SQL. Más bien, las diversas ramas de NoSQL sacrifican algunas cualidades de SQL para ser mejores en otras . El teorema de CAP establece que es imposible para cualquier sistema de base de datos distribuido satisfacer todas las siguientes propiedades:

  • Consistencia
  • Disponibilidad
  • Tolerancia de partición

Por lo tanto, algunas variantes NoSQL siguen el principio BASE , que relaja la restricción de consistencia siempre completa de ACID , que es la base de las bases de datos SQL clásicas. Al perder algunas garantías de coherencia, obtienen la posibilidad de combinar alta disponibilidad y tolerancia de partición en sistemas ampliamente distribuidos, como los sitios web con grandes cantidades de datos y consultas de usuarios, pero poca demanda de coherencia perfecta. Por lo tanto, dichas bases de datos NoSQL están en el corazón de Google , Facebook y Amazon . Por lo tanto, para responder a su pregunta: Sí, NoSQL es innovador ya que prácticamente permite servicios web tan masivos.

Este es solo un ejemplo, ya que NoSQL es un campo diverso, y sus variantes cubren casi todas las combinaciones posibles de parámetros dentro del triángulo CAP .

Florian von Stosch
fuente
No estoy familiarizado con ElasticSearch. Una rápida búsqueda en Google parece mostrar que sacrificies consistencia (C), y por lo tanto es AP, no CAP, que es teóricamente imposible. Editar: Esto fue en respuesta a un comentario desaparecido que sugiere que ElasticSearch cumple con todas las propiedades CAP.
Florian von Stosch
3
Qué lindo, fueron con BASE para contrarrestar ACID. ¿Existe un enfoque intermedio llamado REDOX o SALT?
Patrick M
3

Los casos de uso comunes de NoSQL son innovadores en sus ganancias de productividad en comparación con las bases de datos comunes basadas en SQL. Hay varios factores en esto.

Una es la limpieza. La mayoría de los NoSQL son de código abierto y se pueden instalar en una estación de trabajo o una VM con algunos comandos, y funcionan con valores predeterminados razonables listos para usar. En mi experiencia, incluso Postgres y MySQL no son así; La configuración suele ser necesaria para comenzar incluso en una estación de trabajo con fines de desarrollo.

Otro es el desarrollo conveniente, ya que otras respuestas han descrito en detalle. Las capacidades de indexación JSON de Mongo, o la semántica de clave / valor de redis y Riak, pueden ser ciertas ciertas aplicaciones web necesarias para hacer el trabajo, y las API son fáciles. Algunos NoSQL proporcionan sus propias API RESTful, mientras que con SQL generalmente tiene que escribirlas usted mismo.

Estos factores hacen que las bases de datos NoSQL sean atractivas para proyectos a pequeña escala. El tiempo de recogida tiende a ser bajo. Claro, cuando va a producción tiene que configurar la seguridad y la escala, pero la capacidad de comenzar a codificar y colaborar rápidamente es poderosa y, en mi opinión, innovadora.

Además, en relación con lo anterior, para aplicaciones a pequeña escala (como servicios internos de la empresa o de aplicación a aplicación), un equipo puede ser capaz de poner en marcha una base de datos NoSQL de producción sin involucrar a sus equipos de DBA y sin sufrir rendimiento o integridad problemas como resultado. Puede que a los DBA profesionales no les guste esto, pero los desarrolladores que ven a los DBA como una fuente de obstrucción (correcta o incorrecta) a veces ven a NoSQL como una forma de evitar tener que lidiar con ellos. Lo confieso: una vez cambié una aplicación a pequeña escala de Postgres a SQLite para eliminar el DBA adversario, y elegí implementarlo en Mongo en lugar de Oracle para evitar los procesos de aprobación de DBA y las restricciones de acceso. Sin consecuencias adversas en ninguno de los casos.

fresa
fuente