El backend de nuestra App conectado a NoSQL gracias a Node + MEAN stack

-NOTA: Para profundizar en desarrollo web con Node, MEAN y su interacción con MongoDB así como Angular y el full stack development, hemos añadido recientemente nuevos cursos en la Academia SoyData así como un itinerario que los reúne a todos: Pack Desarrollo Full Stack. Estos cursos son impartidos por Victor Robles, reconocido desarrollador web e instructor. Ahora también tenemos un curso sobre Node y MEAN stack en el pack MongoDB que complementa los cursos sobre esta herramienta NoSQL.

Hablamos a menudo del análisis y el almacenamiento de datos. Para estas tareas nos servimos de sistemas como puede ser MongoDB, un sistema de base de datos NoSQL que está basado en el documento (y estos a su vez son del tipo BSON), que por sus características puede servirnos muy bien en el almacenamiento de datos relacionados con nuestro negocio. Ahora bien, ¿cómo hacemos para conectar esos datos almacenados en MongoDB a nuestros usuarios finales a través de nuestra web? O planteado al revés: ¿cómo llevamos de manera automatizada los datos que introducen los clientes de nuestro negocio hasta el sistema de almacenamiento desde la web? La respuesta, como veremos en casos que se plantean más abajo, es con Node.

Sobre esto último es de lo que vamos a hablar en esta entrada. Cómo conectamos en nuestro backend MongoDB para poder servirnos de todo su potencial en la gestión de datos de nuestra aplicación web. Para esto nos vamos a servir de Node.js y, dentro de un marco de trabajo más amplio, de lo que se conoce como MEAN Stack (un framework conformado por Mongo, Express, Angular y Node).

Javascript nació como un entorno para la programación web, esto es, inicialmente estaba siendo usado en el frontend, siendo una auténtica revolución respecto al entorno HTML, más estático, que se había venido utilizando. NOTA: no confundir NUNCA el lenguaje Java con el lenguaje Javascript, son dos entornos diferentes y se ha convertido en una auténtica prueba del nueve de si algún técnólogo sabe de lo que está hablando o no…advertidos quedáis 😉

He aquí que Javascript siguió ofreciéndonos sorpresas cuando a través de librerías como Angular y Node pasó de ser un entorno púramente frontend, esto es, la capa más visible de una webapp que interactúa con los usuarios, a saltar a todos los ámbitos de la aplicación ampliando su campo de aplicación al backend (la parte ‘no visible’ de una aplicación web, en la que se organizan los datos y las conexiones con los sistemas).

NodeJS destaca en aplicaciones web real-time empleando tecnología ‘push’ sobre websockets. De esta forma, después de un largo periodo en el que el paradigma reinante en la web era la comunicación unidireccional petición-respuesta, con Node.js llegaron por fin aplicaciones web en tiempo real en las que tanto el servidor como el cliente podían iniciar la comunicación, o lo que es lo mismo, la comunicación se hizo bidireccional, permitiendo a su vez intercambiar datos ágilmente entre los dos.

Node y Mongo

Imagen: Node y Mongo, rationalappdev.com

Casos de aplicación

Para ampliar la información sobre Node y sus casos de aplicación recomiendo leer esta entrada en Medium de Tomislav Capan, de la cual he tomado los siguientes casos de aplicación para NodeJS con la conexión Node-Mongo en alguno de ellos.

-CHAT las aplicaciones para chatear son un ejemplo muy bien traido para Node.js ya que son siempre un alto tráfico, ligero al mismo tiempo, intensivo en datos pero sin llegar a ser intensivos en requerimientos de procesamiento.Son también un excelente caso de uso para aprender Node.

-API sobre una base de datos Aunque Node realmente destaca en aplicaciones real-time, se adapta muy bien a la función de explotar los datos de una base de datos orientada al objeto como puede ser MongoDB. Los datos almacenados en formato JSON (BSON es una variante del anterior) permiten funcionar a Node sin el impedimento de la conversión de formato.

-Entradas puestas en cola Es un cuello de botella cuando estamos recibiendo una gran cantidad de datos en una BdD. Mediante una aproximación que reconoce el comportamiento del cliente con anterioridad a que los datos sean escritos en la base de datos podemos obtener una solución a este problema del cuello de botella. Los ejemplos típicos de este caso son: almacenamiento de logs o datos de trazabilidad de usuarios (user-tacking data). Estos son procesados en lotes y no son utilizados hasta después. De manera resumida, se puede poner ‘en cola’ la escritura de determinados inputs a nuestra base de datos con Node y así evitar que este flujo de datos colapse el sistema, dejandolo a un lado.

-Streaming de datos Es posible  procesar con Node ficheros ‘mientras aún se están cargando‘ al venir los datos desde un stream y poder ser procesados online.  Esto se puede realizar en la codificación de video o audio en tiempo real por ejemplo.

-Proxy NodeJS es fácilmente empleado como proxy en el lado servidor donde puede manejar una gran cantidad de conexiones simultáneas sin bloquearse. Especialmente útil cuando se trata de diferentes fuentes de adquisición de datos o servicios conectados con diferentes tiempos de respuesta.

-Dashboard / Cuadros de mando tanto si se trata de monitorizar internamente nuestra aplicación, como de ofrecer un servicio de monitorización de información al cliente, en Node.js tenemos un framework que nos va a ser de gran utilidad para combinar el tiempo real y la bidireccionalidad pudiendo utilizar JS y JSON en todo el stack.

—————-

victor-robles-web

Imagen: Víctor Robles, web developer e instructor SoyData

-NOTA: Para profundizar en desarrollo web con Node, MEAN y su interacción con MongoDB así como Angular y el full stack development, hemos añadido recientemente nuevos cursos en la Academia SoyData así como un itinerario que los reúne a todos: Pack Desarrollo Full Stack. Estos cursos son impartidos por Victor Robles, reconocido desarrollador web e instructor. Ahora también tenemos un curso sobre Node y MEAN stack en el pack MongoDB que complementa los cursos sobre esta herramienta NoSQL.

fullstack