Dentro de los Sistemas Gestores de Bases de Datos (SGBD o DBMS), los motores más importantes y conocidos poseen arquitectura relacional. El modelo SQL es un estándar desde hace tiempo.
Los sistemas de bases de datos SQL se basan principalmente en las Relacionales, con SQL como lenguaje de consulta y manipulación (DML y DDL).
Las bases NoSQL ofrecen algo a mayores, es una alternativa, simplemente otra vía de realizar las cosas.
Es por ello, que el significado No, se atribuye a Not Only, es no sólo SQL, sino algo a mayores.
En los últimos años, este tipo de base de datos, ha crecido de forma considerable en las necesidades empresariales. En estos momentos son sistemas capaces de almacenar gran cantidad de datos que se generan en Internet y acceder a los mismos con mucha velocidad. Han sido creadas para almacenar mucha información y consulta rápida.
La mejor base de datos NoSQL entre los profesionales del sector es MongoDB.
El esquema de las No SQL se encuentra orientado/basado en documentos en formato JSON.
Para gestionar JSON usamos notación javascript con pares de clave:valor con sus respectivas llaves.
{
MiNombre: “Oscar”,
MiApellido: “de la Cuesta”}
En las bases de datos no relacionales NoSQL entra en juego un nuevo tipo llamado BSON o JSON Binario, para realizar búsquedas más rápidamente. En el modelado de datos, dependeremos de la forma de consultar, no sus limitaciones. Los diversos documentos en formato BSON (binario), almacena las longitudes de los campos e índices de los arrays. El documento almacenara algo más espacio, porque contiene metadatos.
BSON permite la serialización de JSON en formato binario. Además de los ya conocidos formatos de tipos de datos en JSON, tendremos más tipos en BSON. Es decir, existe mas variadad de formatos para los datos (cadenas, números, documentos embebidos, punteros a archivos, etc).
Las bases de datos relacionales cumplen un papel muy importante, y siguen siendo muy útiles para muchísimas necesidades, pero son complejas de manejar.
Un modelo relacional puede adaptarse para ser escalable, pero suele ser más complejo y poco eficiente. Los sistemas NoSQL intentan simplifican la forma de actuar, a costa de perder funcionalidad (ejemplo en los JOINS).
Actualmente existen varios tipos de gestores NoSQL.
MongoDB (hablaré de ella y de su uso en otra entrada) es seleccionada por su buen comportamiento y selección por parte de los expertos.
No obstante existen otras alternativas que mencionaré a continuación:
Las características generales de una base NoSQL pueden ser:
- No es una base relacional sino es base de datos orientada a documentos.
- Es indexable. Permite realizar índices hasta geospaciales (search por cercanía).
- Es muy escalable y se realiza de forma sencilla. Es uno de sus puntos fuertes.
- Los procedimientos almacenados pueden ser substituidos por javascript.
- Son muy rápidas en el acceso y modificación de datos.
- Los datos son manejados como si fuesen colecciones (repositorio).
Cada “documento” (en vez de registro) en NoSQL puede contener información de diverso tipo. Existe ausencia de esquema, por lo que permite polimorfismo.
Por ejemplo, todas las entradas de un blog pueden ser tratadas como un único bloque no con varias tablas. No necesitaremos joins para obtener datos.
La velocidad NoSQL es mucho mayor, para funciones de lectura. Pero claro todo para cada necesidad. Existe gran escalabilidad horizontal. Mediante javascript podremos incorporar el MapReduce. Empresas que necesitan manejar muchos datos (BigData), pueden realizar consultas sobre partes o porciones de los datos. Esto es debido a que es muy rápida.
En los tiempos que corren, donde el BigData (ver artículo) está cobrando mucha importancia, este tipo de bases de datos y su velocidad de acceso son bastante relevantes.
Su velocidad, escalabilidad y la ausencia de un esquema fijo son ideales para las grandes compañías.
Pero existen otro tipo de usos aplicables a las NoSQL:
Soluciones B2B, aplicaciones móviles, registro de usuarios, redes sociales, juegos on-line.
Manejo de estadísticas en tiempo real. Gestión de documentos y contenido, etc.
En la próxima entrada intentaré mostrar como trabajar con una base de datos de este tipo. En concreto MongoDB.
Contenido relacionado: