NoSQL¶
Diferencias entre bases de datos relacionales y NoSQL¶
Bases de Datos SQL (Relacionales)¶
- Difíciles de escalar.
- Difícil fragmentar por servicios o áreas geográficas.
- Un pequeño error en un fichero puede arruinar toda la base de datos
- Un error en una SQL puede borrar todas las tablas o corromper un repositorio.
Bases de Datos NoSQL¶
Su objetivo es asegurar la escalabilidad asegurando que los datos se almacenan en un formato que se puede compartir -o fragmentar - entre varios servidores.
Tipos de bases de datos NoSQL¶
- Documentos indexados (MongoDB)
- Orientadas a grafos -Graph Databases- (Neo4g)
- Almacenamiento por columnas (Cassandra)
- Clave-Valor (Couchbase)
- Series temporales, que indexan los datos por sellos temporales (Influx DB).
- Híbridas
Características¶
Sin importar como almacenen los datos, no soportan relaciones.
- NoSQL permite acceder rápidamente a muchos datos. SQL es excelente para procesamiento de datos.
- NoSQl renuncia a los principios ACID (atomicidad, consistencia, aislamiento y durabilidad) de las bases de datos tradicionales.
- Como las bases de datos SQL utilizan una estructura, los cambios son difíciles. Las bases de datos NoSQL simplemente tomen los datos y los almacenan, sin ninguna estructura.
- Consultar datos en NoSQL es más costoso.
Beneficios de NoSQL¶
- Escalado. las bases de datos se fragmentan particionando los datos entre varios servidores. La caída de una máquina no implica la caída de toda la red. Al crecer la base de datos se pueden ir añadiendo servidores.
- Disponibilidad. Como los datos son un simple fichero, se pueden copiar de otros servidores en la red en caso de que uno falle.
Inconvenientes de NoSQL¶
- No proveen gestión de transacciones o codificación real. Son excelentes para almacenar datos que no cambian o que cambian muy poco en cada transacción.
- Son difíciles para los nuevos usuarios.
- Como puede tener muchos datos duplicados, la base de datos se hace muy grande.
- Muchas aplicaciones requieren los tipos de restricciones, consistencia y salvaguarda que dan las bases de datos SQL. En estos casos, no se puede utilizar NoSQL.
- Implementar una base de datos NoSQL es complicado y es difícil encontrar proveedores y administradores adecuados.
- Comprender el modelo NoSQL es difícil para los desarrolladores acostumbrados a programar para sistemas SQL. Toda la lógica de relaciones, transacciones y restricciones se debe realizar en la aplicación, ya que la base de datos NoSQL no la provee.
- Como las NoSQL no son consistentes, los rollbacks son imposibles si algo va mal. Más aún, algunas partes de la base de datos pueden devolver información inconsistente.
Recomendación¶
La regla de oro es usar bases de datos SQL por defecto. Solo se deben usar NoSQL si se tienen muy buenas razones para hacerlo.
Bases de datos orientados a grafos¶
Una base de datos orientada a grafos es un sistema gestor de base de datos online capaz de procesar creaciones, lecturas, actualizaciones y borrados (CRUD) sobre un modelo de datos con grafos. Almacena nodos y relaciones en lugar de tablas o documentos. Los datos se almacenan sin restringirlos a un modelo predefinido, lo que proporciona flexibilidad.
Las bases de datos orientadas a grafos dan tanta importancia a las relaciones entre datos como a los datos mismos.
Hay dos propiedades importantes en la tecnología de bases de datos aventada a gráficos:
- Almacenamiento por grafos.
- Motor de procesado por grafos
Tipos de bases de datos orientados a grafos¶
- Grafos de propiedades
- Contienen nodos (entidades) y relaciones Conexiones entre las entidades).
- Los nodos pueden contener propiedades (pareja, clave-rolan).
- Los nodos se pueden etiquetar.
- Las relaciones tienen nombres y direcciones
- Las relaciones siempre tienen un nodo inicial y un nodo final
- Las relaciones pueden tener propiedades
- Hipergrafos
- En un hipografo cada relación (llamada hiperarista) puede conectar cualquier número de nodos.
- Como las hiperaristas son multidimensionales los modelos de hipogrifo, se utilizan más que los grafos de propiedades.
- Los hipergrafos y los grafos de propiedades son isomorfos. Cualquier hipergrafo se puede representar como un grupo de propiedades, y viceversa.
- Almacenamiento triple
- Utilizan una estructura de datos formada por tripletas sujeto-predicado-objeto.
Utilización¶
Las bases de datos orientadas a grafos son multirrelacionales por naturaleza, a diferencia de las bases de datos relacionales (SQL). También parecen más prácticas, ya que los datos se muestran de forma intuitiva. Las relaciones ya están almacenadas en la base de datos, por lo que no es necesario calcularlas. Pueden almacenar grandes cantidades, ser rápidas y soportar una diversidad de datos actuales.
Además, la base de datos orientada a grafos es perfecta para los big data en tiempo real, ya que se pueden añadir nuevos nodos y relaciones entre nodos fácilmente. Sin embargo, esto no afecta al rendimiento.
- ¿Cuándo usar bases de datos orientados a grafos?
- Si en cualquier momento se pueden añadir propiedad adicionales.
- Cuando no todas las entidades tienen todas las propiedades.
- Si los tipos de las propiedades no están estrictamente definidos.
- ¿Cuándo no usarlas?
- Cuando las consultas no incluyan puntos de inicio específico.
- Cuando se necesita almacenar informacion en la forma clave-valor.
- Cuando se necesite almacenar trozos de información muy grande (como Clobs).
Casos de uso más populares¶
- Redes sociales
- Mapeo de la cadena de suministro
- Gráficos de conocimiento de IA/aprendizaje automático
- Mapeo de redes/operaciones
- Cualquier tipo de análisis
- Motores de recomendación en el comercio minorista
- Aplicaciones de telecomunicaciones
- Privacidad, riesgo y cumplimiento de los datos
- Gestión de redes y TI
- Detección de fraudes
Componentes¶
Hay tres componentes principales en toda base de datos orientada a grafos:
- nodos
- propiedades
- aristas (o relaciones)
Los nodos, en palabras sencillas, son entidades o algunos objetos de un dominio como usuarios, ubicaciones y cosas. Las propiedades se añaden a los nodos para añadir más contexto. En algunos casos, las aristas también tienen propiedades. Y las aristas conectan los nodos y muestran un tipo de conexión. Mira la imagen:
Las aristas o relaciones pueden tener valores adjuntos. Aquí es “Follows”, pero puede haber más de un valor. Otro añadido son las etiquetas, que definen (clasifican) qué tipo de nodos son (Alumno y Profesor). Así, los múltiples nodos juntos forman una especie de ecosistema de mapa mental.
Bases de datos orientadas a grafos populares¶
- Neo4j es la más conocida. Parece sencilla y fácil de usar y, al mismo tiempo, potente. Los comandos del lenguaje de consulta son relativamente fáciles de aprender. Lo más importante de Neo4j es que representa claramente los datos conectados. Sólo con mirarlo, entenderás las relaciones entre muchos nodos. Neo4j sólo proporciona servicios relacionados con el tipo de base de datos gráfica. Se puede decir que Neo4j gana en términos de popularidad y funcionalidad bien establecida.
- ArangoDB es una multiherramienta diseñada específicamente para mantener varios tipos de bases de datos NoSQL. Si el proyecto o negocio demanda varias bases de datos al mismo tiempo, ArrangoDB será de gran ayuda. Lo que es aún más singular de este servicio es que permite combinar SQL y NoSQL en un mismo proyecto.
- Apollo era una base de datos pero ha crecido y ahora es un ecosistema de herramientas, bibliotecas extensiones, etc. Es altamente compatible con los frameworks de Javascript y soporta extensiones de terceros. Por lo tanto, la principal diferencia con respecto a otros es el aumento de los niveles de integración. Algunas cosas importantes son la automatización de varios procesos, GraphQL y sus posibilidades de uso, y el proceso de desarrollo continuo. Es más nuevo que los dos primeros, así que tiene un camino por recorrer.
Características principales de Neo4j¶
Neo4j es una base de datos gráfica nativa, lo que significa que la arquitectura subyacente de cómo se almacenan los datos no está construida sobre tablas. Este tipo de modelo de datos es en realidad un grafo altamente conectado, y al hacer una consulta, en Neo4j no tienes que indexar cada vez que haces un salto como en las bases de datos relacionales.
El lenguaje de consulta Cypher es bastante sencillo. Es un lenguaje declarativo en el que los paréntesis y las relaciones representan nodos como flechas y paréntesis. A continuación se muestra un ejemplo de consulta en Neo4j. Demuestra la consulta de qué juegos vecinos comparten más características con el juego seleccionado (es decir, buscado):
MATCH p=(game:Game)--(characteristic:ConceptEntry)
WHERE game.uid = 'game-borderlands_2' OR game.uid = 'game-fallout_3'
RETURN