Bases de Datos NoSQL

Sistemas de bases de datos convencionales

La mayoría de los motores de bases de datos más populares se basan en la arquitectura relacional, y todos ellos usan el lenguaje de consulta SQL (con variaciones relativas a cada sistema).

Aparición de los sistemas NoSQL

Con el tiempo las bases de datos relacionales se usaron técnicas para normalizarlas, escalarlas y utilizarlas como sistema de persistencia.

En cuanto a la normalización, el profesor de diseño de base de datos que tenemos como coordinador, menciona que ya no es obligatoria, que había surgido por las limitantes en los equipos de hace unos años... Bueno, continuemos...

Llegaron los servicios en la nube y la necesidad de una alta escabalidad. Los modelos relacionales en ocasiones se hicieron menos intuitivos y menos eficientes en un medio con tanta probabilidad de cambio, y se tuvo que implementar sistemas de almacenamiento de resultados en caches para acelerar la resolución de peticiones y evitar ejecutar cada vez la operación necesaria.

Los sistemas de bases de datos NoSQL proponen una estrutura de almacenamiento versátil, aún a costa de perder ciertas funcionalidades como las transacciones que engloban operaciones en más de una colección de datos, o la incapacidad de ejecutar JOINs recurriendo entonces a la desnormalización.

Diferencias

Los documentos no cuentan con una definición de atributos fija.

Facilitan el polimorfismo de datos bajo una misma colección de información.

Almacenan estructuras de datos complejas en un sólo documento aumentando la claridad (al tener todos los datos relacionados a un bloque de información) y el rendimiento (sin tener que realizar JOINs para obtener los datos relacionados)

Es posible mejorar el rendimiento del sistema simplemente añadiendo más nodos e indicando al sistemas los nodos disponibles.

Muchos sistemas permiten utilizar consultas del tipo Map-Reduce, que se pueden ejecutar en todos los nodos a la vez (cada uno operando sobre una porción de datos) y reunir los resultados antes de devolverlos al cliente.

Muchos también dan la posibilidad de indicar el número de replicas en que se hará una operación de escritura, para garantizar la disponibilidad.

Muchos de los sistemas realizan operaciones directamente en memoria y solo vuelcan los datos a disco cada ciento tiempo, permitiendo que las operaciones de escritura sean rápidas.

Al mismo tiempo, se sacrifica la durabilidad de los datos y aumenta la posibilidad de perder las operaciones de escritura y surgir inconsistencias gracias a un factor externo.

Tipos de Bases de Datos NoSQL

Las bases de datos NoSQL se utilizan cuando se necesita escalar rápidamente y cuando se requiere un rendimiento considerable. Y se utilizan como sistemas de almacenamiento, sistemas de persistencia para guardar cache o sistemas para analíticas de uso, entre otros casos.

Pero por lo mismo, no todas las bases de datos NoSQL son iguales, al día de hoy existen más de 225 sistemas de bases de datos NoSQL cada una con sus respectivas características dependientes a su enfoque.

Aunque hay varias aproximaciones diferentes para clasificarlas, en lo general se considera que existen cuatro tipos diferentes:

Orientadas a documentos

Gestionan datos semi-estructurados. Versátiles porque cada documento puede tener la misma estructura de datos o no. Cada documento es autodescriptivo, y no depende necesariamente de otro documento. Los documentos se agrupan en “colecciones”. Son almacenados en un formato estándar como JSON, XML, BSON o YAML

Casos de uso

Ejemplo

[
    {
        "year" : 2013,
        "title" : "Turn It Down, Or Else!",
        "info" : {
            "directors" : [ "Alice Smith", "Bob Jones"],
            "release_date" : "2013-01-18T00:00:00Z",
            "rating" : 6.2,
            "genres" : ["Comedy", "Drama"],
            "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
            "plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
            "actors" : ["David Matthewman", "Jonathan G. Neff"]
        }
    },
    {
        "year": 2015,
        "title": "The Big New Movie",
        "info": {
            "plot": "Nothing happens at all.",
            "rating": 0
        }
    }
]

Bases de datos más conocidas

Orientadas a columnas

Pensadas para realizar consultas y agregaciones rápidas sobre grandes cantidades de datos, generalmente en aplicaciones analíticas. Funcionamiento similar a las bases de datos relacionales, pero almacenando columnas en lugar de registros.

Casos de uso

Bases de datos más conocidas

De clave-valor

Almacenan tuplas. Tanto las claves como los valores pueden ser cualquier cosa, desde objetos simples hasta objetos compuestos complejos. Son altamente divisibles y permiten el escalado horizontal a escalas que otros tipos de bases de datos no pueden alcanzar.

Casos de uso

Bases de datos más conocidas

En grafo

Basadas en la teoría de grafos, utilizan nodos y aristas para representar la información almacenada. Útiles para modelos con pocos datos pero muchas interrelaciones entre sí. Hay diferentes tipos de grafos: estándar o simple, con nodos y aristas; con etiquetas; o, con propiedades dirigidas.

Casos de uso

Bases de datos más conocidas

Teorema CAP (Consistency-Availability-Partition Tolerance) (Teorema Brewer)

Teorema que dice que en sistemas distribuidos es imposible garantizar a la vez:

Clasificación de acuerdo al teorema CAP

Consiguen una consistencia parcial a través de la replicación y la verificación.

Logran la consistencia y replicación de los datos a través de los nodos, sacrificando disponibilidad.

Gestionan la replicación de los datos para solucionar la torelancia a particiones.

NoSQL y Relaciones

Relaciones 1 a 1

El consejo más habitual es que esa relación quede construida dentro de un mismo documento (relación embebida). Si el concepto no tiene relaciones con otros de la base de datos se opta por la relación embebida.

Relaciones Uno a Muchos

En cambio si el concepto se relaciona con otros conceptos se plantea la relación de referencia. Si bien se hace presente una de sus debilidades, que son las consultas utilizando JOINs.

Firebase

Es la base datos NoSQL que estoy usando en un proyecto externo, en su versión Realtime Database. Me emociona la idea de usar Cloud Firestore, pero ya compartiré más detalles y comentarios sobre las bases de datos en el sistema de Firebase en un próximo artículo.

Las características de Firebase RealTime Database:

Basada en una presentación planeada para presentar en la oficina. Modificada

#NoSQL