BBDD NoSQL y MongoDB

Una aproximación a las bases de datos NoSQL y MongoDB

Número de visualizaciones
14/12/2016

Para todos aquellos que hemos trabajado en el mundo del Big Data y el Business Intelligence, el término de base de datos NoSQL nos es algo familiar, pero ¿qué es una base de dato NoSQL y qué importancia tiene dentro de este universo del análisis de datos?

Antes de adentrarnos y exponer qué es una BD NoSQL recordemos algunos conceptos básicos.

  • Una base de datos es un repositorio donde se almacenan datos relacionados y desde donde se pueden también recuperar. Cada una se compone de una o más tablas que guardan un conjunto de datos en columnas (atributo o característica del dato) y filas (que conforman un registro).
  • Una base de datos es relacional cuando se cumple con el modelo relacional que garantiza la unicidad de registros, la integridad referencial y la normalización. En ellas se usa el lenguaje SQL como estándar para la definición, manipulación y control. Este lenguaje es declarativo y es muy parecido al lenguaje natural, por estas razones es un lenguaje con el que se puede acceder a todos los sistemas relacionales comerciales.

Entonces… ¿qué es una base de datos NoSQL?

Desde finales de los años 90 cada vez más empresas y personas se conectan a Internet, aumentando con ello tanto los usuarios que acceden a la red como los servicios que se ofrecen a través de ella. Esto ha generado un aumento considerable en el volumen de datos que se deben procesar, por lo que la versión clásica de guardar los datos de forma centralizada, es decir en un único espacio físico como en una base de datos “tradicional”, no es ni óptima ni eficiente por lo que son necesarios otros modelos que soporten la distribución masiva de los datos.

Por lo tanto podemos definir una base de datos NoSQL como aquella que no requiere de estructuras de datos fijas como tablas; no garantizan completamente las características ACID y escalan muy bien horizontalmente. Se utilizan en entornos distribuidos que han de estar siempre disponibles y operativos y que gestionan un importante volumen de datos.

Podríamos resumir las principales características de una base de datos NoSQL como sigue:

  1. El lenguaje estándar no tiene porqué ser SQL
  2. El esquema de datos es flexible o no tiene un esquema predefinido, lo que permite el tratamiento de datos heterogéneos
  3. Las propiedades ACID no siempre están garantizadas
  4. Mayor coherencia entre los datos de programas y bases de datos
  5. Diseñadas para ser escalables generalmente de forma horizontal
  6. Suelen ser distribuidas
  7. Frecuentemente son de código abierto con grandes comunidades de desarrollo detrás

Por otro lado, las características de las aplicaciones que usan bases de datos NoSQL suelen ser las siguientes:

  1. Trabajan con datos cuyo origen y formato es variable
  2. Trabajan con datos muy relacionados
  3. Necesidad de una mayor capacidad analítica
  4. Mayor volumen de datos
  5. Mayor disponibilidad y flexibilidad
  6. Trabajan en tiempo real

¿Cuáles son por tanto las principales diferencias entre una Base de Datos Relacional y una Base de datos NoSQL?

Las bases de datos relacionales se diferencian de las bases de datos NoSQL principalmente en:

  1. No hay un modelo único de datos. El modelo relacional ofrece una visión uniforme de los datos, la relación, mientras que las bases de datos NoSQL engloban a muchos modelos de datos
  2. En el modelo racional es necesario definir a priori un esquema conceptual que indique qué datos hay, cómo se estructuran, que atributos poseen y cómo se relacionan.
  3. Las bases de datos NoSQL no suelen permitir operaciones JOIN (búsqueda de datos entre varias tablas) ya que al manejar volúmenes de datos tan grandes el coste en tiempo de repuesta puede ser muy alto
  4. En NoSQL generalmente no se usa el lenguaje SQL, por ejemplo Cassandra utiliza CQL, MongoDB (de la que hablaremos a continuación) utiliza JSON y Big Table utiliza GQL.
  5. Las bases de datos relacionales tienen un gran recorrido, lo que ha permitido crear estándares, como el lenguaje SQL, lo que no ha sido posible aún para las bases de datos NoSQL

El teorema de CAP

Hablar de base de datos NoSQL conlleva explicar el Teorema de CAP, que nos permite clasificar a este tipo de bases de datos. El profesor  Eric Brewer introdujo el teorema de CAP en una charla de un congreso de computación distribuida. Brewer comentó que las propiedades de un sistema distribuido son:

  • La Consistencia: exige que los usuarios del sistema pueden recuperar siempre los mismos valores para unos mismos datos en un instante de tiempo determinado.
  • La Disponibilidad : exige que las peticiones de servicio enviadas por los usuarios a un nodo que está disponible deben obtener su debida respuesta
  • La Tolerancia a las particiones : exige que el sistema proporcione servicio a los usuarios a pesar de que se puedan producir situaciones de avería que causen que el sistema quede particionado en diferentes componentes

Desafortunadamente, en un sistema distribuido sólo dos de estas propiedades pueden ser garantizadas de forma simultánea. Es decir, el teorema de CAP establece que es imposible garantizar las tres a la vez en un sistema distribuido.

Vistas estas características ya podemos hablar sobre MongoDB, una base de datos NoSQL  de las más populares y creada por la empresa 10gen en 2007. Entre sus características podemos destacar que es de software libre, escalable,  de alto rendimiento desarrollada en C++ y disponible para multitud de sistemas operativos (Linux, Windows, Solaris…).

Es una base de datos NoSQL CP, es decir,  tiene una visión consistente de los datos frente a la disponibilidad de las particiones como queda definido en el teorema de CAP.

Otras características importantes de MongoDB son:

  • Almacenamiento orientado a documentos BSON (formato binario de JSON)
  • Replicación maestro-esclavo y alta disponibilidad
  • Soporte de índices
  • Consultas basadas en documentos
  • APIs y drivers para muchos lenguajes de programación (como Python y R, que como ya vimos en este artículo tan importantes son para el análisis de datos)
  • Escalabilidad horizontal
  • Ausencia de transacciones por lo que es más rápida y escalable

¿Cuándo usar MongoDB?

MongoDB es útil para aplicaciones que necesiten almacenar datos semi estructurados. Es muy versátil en entornos que necesiten escalabilidad ya que es relativamente fácil de configurar. Por otro lado, también es de utilidad en aplicaciones que almacenan grandes cantidades de datos complejos, como por ejemplo en blogs que tienen posts, comentarios, etc… o en aplicaciones de analítica.

0
Categorizado en: Redes, Sistemas y Seguridad

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre MasterClass de INESEM. Una plataforma en la que profesionales enseñan en abierto

Profesionales enseñando en abierto