NoSQL: por qué, cómo y cuándo usar bases de datos no estructuradas

Ya tienes nociones básicas de los diferentes modelos de bases de datos. Conoces los principales paradigmas y serías capaz de listar las diferencias entre ellas. Tal y como vimos en el artículo SQL vs NoSQL: diferencias entre sistemas de gestión de bases de datos, sabes que mientras un SGBD se basa en la interrelación de la información persistida (SQL), el otro se caracteriza por guardar información no estructurada (NoSQL).

De modo que en este nuevo post veremos cuándo es buena idea basar nuestro proyecto en esta última tecnología, NoSQL, y cómo implementarla.

¿Cuál es la tendencia respecto a los SGBD?, ¿el NoSQL tiene futuro en el mercado o se trata de una moda pasajera? Empezamos…

Cuándo usar bases de datos NoSQL

Son muchas las situaciones en las que puedes necesitar del modelo de datos no relacional como gestor de la información en tu aplicación. 

A continuación te presentamos diversos escenarios en que es recomendable y eficiente usar sistemas de gestión de bases de datos NoSQL:

Gran escalabilidad

En aquellos casos en los que requieras de una escalabilidad importante, NoSQL te permite realizar un escalado horizontal con el cual distribuir la carga en todos los nodos, y así aumentar el rendimiento del sistema.

NoSQL será tu mejor opción si tus recursos son escasos (hardware, procesamiento, etc.) y no necesitas respetar la integridad de los datos.

Volumen alto de datos

Si tu aplicación maneja un volumen de datos tan elevado que el sistema tradicional, basado en las interrelaciones de sus entidades, no es suficiente para satisfacer todas las necesidades de tu proyecto, una buena solución es trabajar con NoSQL.

Esto se debe a que el modelo no relacional tiene la capacidad de gestionar enormes cantidades de datos; mientras que el modelo SQL tiende a ralentizarse cuando se supera el millón de filas.

Datos que requieren alta velocidad

Si vas a trabajar con mucha información que debe ser tratada a gran velocidad, las bases de datos NoSQL, en comparación con las relacionales, son capaces de realizar más operaciones por segundo.

Eso sí, esta rapidez la entrega a costa de renunciar a características propias del modelo relacional como las ACID (Atomicity, Consistency, Isolation, Durability) que vimos anteriormente.

Máxima flexibilidad

Por último, será una buena opción optar por esta tecnología cuando necesites una alta flexibilidad en el esquema de la información. Es decir, si en el transcurso de ejecución de tu aplicación necesitas que cada documento (una row en el sistema tradicional) almacene diferentes campos y tipo de datos, NoSQL te lo pone fácil. Cada documento puede estructurarse de forma diferente al resto.

Cómo usar el modelo no relacional NoSQL

Todo lo que estamos viendo podría parecerte muy abstracto, así que próximamente revisaremos más a fondo cómo poner en marcha este modelo de gestión de datos. Por ahora, presentamos una pincelada de lo que tendremos que hacer en un proyecto desarrollado en un entorno linux con NodeJS y MongoDB como gestor de bases de datos:

  1. Instalar NodeJS.
  2. Instalar MongoDB.
  3. Configurar conexión.

Instalar NodeJS

Actualizamos repositorios, instalamos NodeJS e instalamos el gestor de paquetes. Por último comprobamos la versión instalada:

bbartes@bbartes:~$ sudo apt update
bbartes@bbartes:~$ sudo apt install nodejs
bbartes@bbartes:~$ sudo apt install npm
bbartes@bbartes:~$ nodejs -v

En este enlace encontrarás la documentación de NodeJS para todas sus versiones. 

Instalar MongoDB

Añadimos repositorio, instalamos MongoDB, habilitamos el servicio para que arranque en cada inicio, lo iniciamos y por último comprobamos la versión instalada:

bbartes@bbartes:~$ sudo apt-key adv --keyserver
hkp://keyserver.ubuntu.com:80 --recv
9DA31620334BD75D9DCB49F368818C72E52529D4
bbartes@bbartes:~$ echo "deb [ arch=amd64 ]
https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse"
| sudo tee /etc/apt/sources.list.d/mongodb.list
bbartes@bbartes:~$ sudo apt update
bbartes@bbartes:~$ sudo apt install mongodb-org
bbartes@bbartes:~$ sudo systemctl enable mongod
bbartes@bbartes:~$ sudo systemctl start mongod
bbartes@bbartes:~$ mongod --version

En este enlace encontrarás la documentación de MongoDB para todas sus versiones.

Configurar conexión

Dando por hecho que tenemos montada correctamente la estructura del proyecto, así como los modelos propios de nuestra aplicación y un index.js, configuramos nuestro fichero package.json con las siguientes dependencias:

{
    "name": "Example",
    "main": "index.js",
    "dependencies": {
        "express": "~4.0.0",
        "mongoose": "~3.6.13"
    }
}

Es momento de montar nuestro servidor en index.js. Para ello tenéis acceso a la documentación de las dependencias que estamos utilizando: Express y Mongoose.

Ahora ya podemos poner en marcha nuestro servidor: Npm instalará las dependencias y node lanzará la aplicación. Esto lo haremos ejecutando los siguientes comandos, ubicados en la raíz de nuestro proyecto:

bbartes@bbartes:/var/www/html/app$ npm install
bbartes@bbartes:/var/www/html/app$ node index.js

Al margen de vuestra configuración en index.js debemos añadir las siguientes dos líneas para establecer la conexión con MongoDB:

// Utilizamos la librería de mongoose
var mongoose = require('mongoose');
//Conectamos con Mongo:
mongoose.connect('mongodb://user:pass@host:port/database');

Y ahora ya sí, creamos una ruta que liste los datos que tenemos en nuestra base de datos:

// Obtenemos todos las pelis:
router.route('/pelis)
  .get(function(req, res) {
    //La función find de mongoose permite recuperar registros del modelo
    Peli.find(function(err, pelis) {
    //Si se produce un error lo devolvemos:
    if (err){
      res.send(err);
    }
    // En caso contrario, devolvemos los resultados:
    res.json(pelis);
  });
});

Importante: recuerda exportar el modelo (Peli) cuando definas el schema (module.exports).

Hasta aquí hemos visto, de manera resumida, cómo interactúa NodeJS con una base de datos NoSQL. Cabe indicar que hemos pasado por alto muchos detalles que habrían alargado en exceso este artículo y que nos habrían desviado bastante de la temática que estamos tratando. No obstante, en futuras publicaciones tendremos más oportunidades para entrar en materia.

Una breve aclaración

He escogido MongoDB ya que, según Google Trends, es el más buscado de los principales gestores de bases de datos (información detallada en el gráfico inferior).

En cuanto al framework utilizado, hemos optado por NodeJS ya que ambos se comunican a la perfección gracias al formato de datos JSON, pero si quieres valorar otras opciones, mi compañero Jose Hurtado nos explica en detalle cuáles son los mejores frameworks de Javascript que debes probar en 2019, entre ellos Vue.js y Meteor.js. 

Interés de los usuarios en los distintos frameworks de Javascript, según Google Trends.

Tendencias de bases de datos NoSQL

Para terminar, ¿serán las bases de datos NoSQL las predominantes en el futuro? 

No podemos precipitarnos, pues a pesar de que grandes compañías como Facebook o Twitter apuestan por nuevos motores de bases de datos (Cassandra, RocksDB, etc.) y tienden al uso exclusivo de tecnologías NoSQL, dos problemas dificultan que esto pueda ocurrir en un futuro próximo:

En primer lugar, el desconocimiento. Al momento de decidir cuál es la tecnología idónea para un proyecto, muchos creen que es imposible garantizar la integridad de los datos con NoSQL.

Y aunque es comprensible llegar a esa conclusión, esa afirmación no es cierta: existen métodos para poder hacerlo en bases de datos documentales. En este sentido, no es una buena idea tratar de interpretar toda la temática NoSQL partiendo de la base SQL, yaque ambos sistemas de gestión de bases de datos funcionan de formas completamente distintas.

El segundo problemaconsiste en el gran abanico de tipos de tecnologías NoSQL que se pueden encontrar: desde clave/valor hasta las tabulares, pasando por las documentales o las grafos. Es muy fácil equivocarse en esa elección y muy importante que encaje correctamente con el proyecto en cuestión.

Acabo compartiendo el siguiente gráfico, elaborado por DB-Engines, que muestra la popularidad de los principales SGBD:

Ranking con los principales SGBD, de acuerdo al sitio web DB-Engines.
Principales sistemas de gestión de bases de datos, según DB-Engines.

¿Cuál ha sido tu experiencia con NoSQL?, ¿necesitas más información al respecto? Contacta a nuestro equipo de desarrolladores web para recibir un completo asesoramiento al respecto.

Foto perfil

Brian Bartés |

Full Stack Developer

Comentarios sobre el artículo

Deja un comentario

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

*