Antecedentes de las Bases de Datos NoSql

Si hay algo que ha permanecido prácticamente imperecedero en el mundo de la tecnología, eso son las bases de datos. El modelo relacional, con más de 40 años a sus espaldas, sigue todavía vigente en nuestros días y es la base de la mayoría de aplicaciones que acceden a una base de datos.

Sin embargo, no es el único modelo existente, ni el único en uso. En los últimos tiempos han cobrado importancia las bases de datos que no cumplen con los principios expresados por Codd en 1970. Se trata de las bases de datos no relacionales, también conocidas como NoSQL, por no utilizar el lenguaje SQL casi universal en las bases de datos convencionales.

El concepto NoSQL

Carlo Strozzi

 El primer uso documentado que se tiene del término NoSQL, fue el hecho por italiano Carlo Strozzi en 1998 para referirse a su Base de Datos relacional en una reunión de desarrolladores.

Su base de datos guardaba datos en archivos ASCII y se accesaba a través de Shell scripts de Unix, en lugar de utilizar el SQL (Structured Query Language).

El uso de este término mostraba la frustración que existía en ese tiempo entre la comunidad de desarrolladores, con respecto al uso de SQL. A pesar de que era un estándar abierto con un soporte masivo dentro de la prevalencia de las Bases de Datos Relacionales de ese tiempo, el término NoSQL reflejaba el deseo de encontrar una mejor forma de hacer las cosas sin llegar a la complejidad de los queries SQL de esa época.

Fue así como Carlo Strozzi reunió en San Francisco a un grupo de desarrolladores con la misma inquietud para mostrarles su base de datos. Pasada dicha reunión, los desarrolladores de ese tiempo continuaron experimentado con formas alternativas de mecanismos de consulta de Base de Datos. Adicionalmente, aparecían nuevas tecnologías que abstraían la complejidad de los queries de la labor de los desarrolladores.

Para el año 2009, ya habían surgido varias bases de datos NoSQL de código abierto (open-source). Entre estas estaban Riak, MongoDB, HBase, Accumulo, Hypertable, Redis, Cassandra, and Neo4j, las cuales habían sido creadas entre el 2007 y 2009.

Los rápidos cambios en la tecnología de sistemas de base de datos, hicieron que Eric Evans de la Compañía Rackspace y Johan Oskarsson de Last.fm organizaran la primera reunión de Desarrolladores Open Source.

Eric Evans

Para darle un nombre a dicha reunión y que pudiera ser usado para distribuir la invitación en las redes sociales, Eric Evans utilizó el término (#NoSql) como hashtag, de donde se acuñó oficialmente el término para agrupar las diferentes versiones de Bases de Datos No Relacionales que existían.

Dentro del contexto presentado, en la actualidad el término NoSQL resume el significado de “No Solamente SQL”, lo que implica que cuando se diseña una solución de software o un producto, existe más de un mecanismo de almacenamiento de datos que puede ser utilizado de acuerdo a las necesidades.

Con el advenimiento de este concepto, encontramos una alternativa a los sistemas tradicionales de almacenamiento en bases de datos relacionales en los cuales la data es almacenada en tablas y el esquema de datos se diseña cuidadosamente antes que la base de datos se construya físicamente. El concepto NoSql agrupa la definición de sistemas de almacenamiento de datos que no se basan en este tipo de estructuras, sino en modelos de datos más flexibles.

Razones para el Surgimiento de las Bases de Datos NoSQL

  • Necesidad de utilizar modelos de datos más flexibles y reusables que los que ofrece el modelo relacional con las operaciones SQL.

Las bases de datos no relacionales han sido aplicadas a una amplia gama de problemas donde las bases de datos relacionales no han producido un fuerte soporte.

Las bases de datos NoSQL han sido creadas para manejar modelos y estructuras de datos, los cuales en las bases de datos relacionales requieren de una considerable administración o distribución y una reconstrucción de datos utilizando código de programación complejo.

  • Necesidad de utilizar sistemas más económicos y menos complejos que reduzcan costos de licencia, infraestructura y desarrollo.
  • Necesidad de encontrar sistemas más escalables a los actuales.
  • Incremento de volúmenes y variedad en la estructura de los datos.
  • Necesidad de manejar velocidades de respuesta rápidas para volúmenes grandes de información.
  • El surgimiento de la web como plataforma de almacenamiento de datos y aplicaciones ha creado un factor de cambio a medida que ha surgido la necesidad de soportar grandes volúmenes de datos manejados en clusters.

 

Qué son las Bases de Datos NoSql?

Las bases de datos relacionales descansan su manejo en tablas, columnas y filas o esquemas para organizar y obtener los datos. Como se ha mencionado, las bases de datos NoSQL no siguen este tipo de organización, sino que pueden acomodar los datos en diferentes modelos de datos tales como llave-valor, documentos, familia de columnas y formato de grafos.

Diferencia en Estructuras de Base de Datos SQL y NoSQL

Estas bases de datos son particularmente útiles para almacenar y trabajar con grandes volúmenes de datos no estructurados, cuyo uso está aumentando a una velocidad mayor que los datos estructurados y que no tienen cabida en los esquemas relacionales. La mayoría son de código abierto.

Entre los tipos comunes de datos no estructurados podemos encontrar:

  • Datos de usuarios y datos globales de sesiones de cada uno en una aplicación
  • Datos de chats
  • Datos de Mensajería
  • Datos de bitácoras de uso de sistemas
  • Datos de series de tiempo relacionada a IoT y dispositivos
  • Grandes volúmenes de datos de video e imágenes

El surgimiento de la necesidad de manejar datos en clusters ha promovido el uso de las bases de datos NoSQL, ya que se sabe que la bases de datos relacionales no han sido diseñadas para correr eficientemente en clusters. De allí que la habilidad de procesar cantidades de datos enormes y distribuirlas rápidamente entre clusters son aspectos muy deseables en el diseño web y de la nube.

En el siguiente cuadro se puede encontrar un resumen de las diferencias entre las bases de datos SQL y NoSQL que nos ayuda a entender las características de las últimas:

Características Base de Datos Relacionales o SQL Base de Datos NoSQL
Modelo de datos

El modelo relacional almacena los datos siguiendo las 3 formas de normalización, en estructuras de tablas, las cuales están formadas por filas y columnas. Trabajan con un esquema que define estrictamente en objetos las tablas, columnas, índices, relaciones entre las tablas y otros elementos que forman parte de las bases de datos.

 

Las bases de datos no relacionales (NoSQL) no contienen un esquema tan rígido como el de las bases de datos relacionales. Mayormente se utiliza una llave de partición para recuperar valores, conjuntos de columnas o documentos JSON o XML semiestructurados,

Propiedades ACID (Teorema CAP)

Los sistemas de administración de bases de datos relacionales (RDBMS) tradicionales manejan un conjunto de propiedades definidas por el acrónimo ACID (por sus siglas en inglés) que significan Atomicidad (Atomicity), Consistencia (Consistency), Aislamiento (Isolation) y Durabilidad (Durability).

 

Normalmente, las bases de datos NoSQL intercambian algunas de las propiedades ACID de los sistemas de RDBMS tradicionales por un modelo de datos más flexible que escala en forma horizontal.

Desempeño Para lograr un desempeño acorde con las necesidades, es necesaria la optimización de consultas, índices y los valores de almacenamiento de las estructuras de tablas, así como la correcta disposición de los datos físicos en los discos.

El desempeño, por lo general, tiene dependencia con el tamaño del cluster de hardware utilizado, la latencia de red y la aplicación que efectúa la llamada.

Escalamiento

Para lograr escalabilidad se necesita manejar disponibilidad de recursos físicos en hardware más rápido y manejo de estructuras en memoria.

Se requieren inversiones adicionales para que las tablas relacionales abarquen un sistema distribuido.

Está diseñada para reducir el escalamiento usando clusters distribuidos de hardware de bajo costo para aumentar el desempeño sin que aumente la latencia.
API Solicita almacenar y recuperar datos que están comunicados mediante consultas que se ajustan a un lenguaje de consulta estructurado (SQL por sus siglas en inglés). Estas consultas son analizadas y ejecutadas por los sistemas RDBMS. Las API basadas en objetos permiten a los desarrolladores almacenar y recuperar fácilmente estructuras de datos en memoria. Las llaves de partición permiten que las aplicaciones busquen pares de llave-valor, familias de columnas o documentos semiestructurados que contengan atributos y objetos de aplicación serializados.
Disponibilidad de Herramientas Las bases de datos SQL normalmente ofrecen un amplio conjunto de herramientas que simplifican el desarrollo de aplicaciones de base de datos. Las bases de datos NoSQL suelen ofrecer herramientas para administrar los clusters y el escalamiento. Las aplicaciones representan la interfaz primaria de los datos subyacentes.

Tipos de Bases de Datos NoSQL

Debido a que existen diferentes arquitecturas de bases de datos NoSQL en el mercado, se ha utilizado mayormente la siguiente clasificación para agruparlas en los siguientes tipos:

 Llave – Valor (Key – Value)

Este tipo de almacenamiento es el de uso más simple.

La base de datos usa una tabla (de tipo hash) para almacenar los valores únicos de las llaves y los punteros a cada valor o dato. El valor es un blob que almacena el sistema sin importar que existe dentro, la responsabilidad de interpretar el contenido es de la aplicación que utiliza los datos.

Estructura Llave – valor

Dado que en este tipo de base de datos se utiliza el acceso por llave primaria, es rápida en la lectura de datos y fácilmente escalable.

Ejemplos de base de datos de este tipo:

  • Riak
  • Redis
  • Memcached
  • Amazon DynamoDB
  • Couchbase

 Entre las bases de datos existentes de llave-valor, tienen diferencias entre unas y otras. Por ejemplo, en Memcached no se maneja la persistencia de datos, mientras que en Riak sí.

Son ideales para los siguientes usos:

  • Almacenamiento de datos de sesiones de usuario
  • Mantenimiento de perfiles de usuario sin esquema fijo
  • Almacenamiento de preferencias de usuario

No son recomendables en los siguientes casos:

  • Si se necesita consultar la base de datos usando el valor o contenido de un dato específico dentro de lo que se almacena como blob.
  • Si se necesita tener relaciones entre los diferentes valores de datos
  • Si se necesita utilizar llaves únicas compuestas

 

Documentos

Este tipo de base de datos guarda y obtiene documentos, los cuales pueden estar en formato XML, JSON, BSON y otros. Estos documentos son estructuras de datos jerárquicas y auto-descriptivas en forma de árbol, las cuales pueden consistir en mapas, colecciones, y valores escalares.

Los documentos guardados son similares entre unos y otros, pero no exactamente iguales. Estas bases de datos almacenan los documentos en la parte de valor de un esquema de llave-valor.

Colecciones y Documentos

Estas bases de datos proveen un lenguaje de consulta provisto de opciones y otros objetos tales como índices, permitiendo una transición fácil desde el modelo de datos relacional. Se pueden realizar búsquedas utilizando las llaves primarias y además usando los contenidos de datos.

Ejemplos de base de datos de este tipo:

  • MongoDB
  • CouchDB
  • Terrastore
  • OrientDB
  • RavenDB
  • MarkLogic

Son ideales para los siguientes usos:

  • Sistemas de administración de contenido (imágenes de documentos, fotos, videos, etc.)
  • Plataformas para blogs
  • Plataformas de análisis de datos
  • Plataformas de comercio electrónico

No son recomendables en los siguientes casos:

  • Si se necesita ejecutar instrucciones de consulta de datos complejas
  • Si se tiene una aplicación que requiere transacciones de operaciones múltiples y complejas

Familia de Columnas

Este tipo de base de datos están construidas en base a filas. Los datos almacenados en cada fila tienen un identificador único y están almacenados en un formato de columnas flexibles.

La diferencia entre las bases de datos de familia de columnas y las relacionales, es que las filas almacenadas no tienen el mismo número de columnas. Es permitido agregar una columna a cualquier fila, sin agregarla a todas las demás filas de la base de datos. Debido a su parecido con las bases de datos SQL, son fáciles de consultar, pero no son tan flexibles en el momento de almacenar información al azar como las de documentos o llave-valor.

Familia de Columnas

Estructura de familia de columnas con 3 filas. Cada fila tiene su propio set de columnas.

Ejemplos de base de datos de este tipo:

  • Cassandra
  • Apache Hadoop HBase

Son ideales para los siguientes usos:

  • Sistemas de administración de contenido (imágenes de documentos, fotos, videos, etc.)
  • Plataformas para blogs
  • Sistemas que mantienen conteos
  • Sistemas que requieren un gran volumen de operaciones de escritura (logs de acciones)

No son recomendables en los siguientes casos:

  • Si se necesita ejecutar instrucciones de consulta de datos complejas
  • Si los patrones de búsqueda de datos cambian constantemente

 

Estructuras de Grafos

Este tipo de base de datos están basadas en nodos, ejes y relaciones. Se guardan entidades de datos y se permite a los usuarios añadir relaciones entre estas entidades. De cualquier manera, la base de datos no se adentra en lo que está almacenado en las entidades ni tampoco en la forma en que está guardado.

Esta base de datos utiliza estructuras complejas de grafos con la capacidad de definir ejes, nodos y propiedades de dichos nodos. Esto no solamente provee grandes capacidades para consultar los datos en forma relacional sino que provee búsquedas libres del uso de índices que pueden llegar a demorar el tiempo de respuesta de la búsqueda en otras bases de datos NoSql.

Estructura de grafo

Ejemplos de base de datos de este tipo:

  • Neo4j
  • GraphBase
  • Infinite Graph

Son ideales para los siguientes usos:

  • Sistemas con conexiones entre los datos (redes sociales, infocentros de ruteo, data geoespacial
  • Recomendadas para aplicaciones analíticas, especialmente aquellas que realizan predicciones, recomendaciones, etc.

 Consideraciones a tomar en cuenta al considerar el uso de una Base de datos

  • Diversidad en los datos y manejo flexible
  • Escalabilidad
  • Desempeño o Tiempo de Respuesta
  • Disponibilidad Continua
  • Administración
  • Costo
  • Apoyo de la Comunidad Open Source

 

Referencias:

https://www.simplilearn.com/rise-of-nosql-and-why-it-should-matter-to-you-article

http://basho.com/resources/nosql-databases/

https://www.toptal.com/database/the-definitive-guide-to-nosql-databases

https://www.thoughtworks.com/insights/blog/nosql-databases-overview

 

Share: