¿POR QUÉ MONGODB?

Hasta hace poco el tipo de base de datos por defecto de prácticamente todos los proyectos era siempre una base de datos SQL. Pero cómo habrá escuchado en los últimos años se escucha más y más el uso de bases de datos "NoSQL". Aunque el término no sirve de mucho, ya que indica lo que no es, ya con el nombre se puede entrever que será bases de datos que han decidido sacrificar el uso del estándar SQL para poder centrarse en otras características.

Mayoritariamente hay 4 tipos de bases de datos NoSQL:

  • Key-Value Store: Son simples entradas clave-valor, que se suelen agrupar en "buckets", pero gracias a esta sencillez suelen ser bases de datos con una escritura y lectura muy rápidas, pero que pueden llegar a ser difíciles de mantener si no llevas un buen control de las claves. Algunos ejemplos serían Redis o Amazon DynamoDB
  • Column-based Store: Son muy parecidas a las bases de datos de SQL, pero en vez de estar enfocadas en las filas, lo están en las columnas. Es decir que las filas sería columnas y en cada fila tendremos todos los valores de todas las entradas para esa columna. Esto permite un sistema de peticiones muy rápido que suele ser necesario para análisis de big-data. Tenemos algunos ejemplos como HBase, Cassandra, Druid o Google BigTable
  • Graph-based: Algo más modernas, este tipo de bases de datos están enfocadas totalmente en las relaciones entre lo que se llaman "Nodos". Toda información es un nodo y cualquier nodo puede estar relacionado con otros nodos. Esto penaliza un poco el tiempo de peticiones, pero ayuda a tener un control mejor en aplicaciones que se basan en eso, y en realidad pueden ser más rápidas en peticiones muy complejas. Son un poco más modernas así que no hay tantos ejemplos pero la más famosa sería Neo4j.
  • Document-based Store: Este es el tipo de base de datos que nos interesa en este artículo. Se especializan en grupos de documentos, normalmente en formato JSON o XML, que se organizan en "collections", es decir, grupos de documentos. Las colecciones pueden tener o no tener un estructura de campos fija, o una mezcla de ambas, lo que agrega mucho dinamismo al tipo de datos a guardar. El ejemplo que vamos a ver hoy es MongoDB

¿Qué es MongoDB?

  • Así como hemos indicado antes, es una base de datos de tipo de documentos.
  • Se basa en JSON y javascript, ya que este es el lenguaje de comunicación con el servidor, tanto para hacer las peticiones como si fuera necesario procesarlas o ejecutar scripts a nivel de base de datos.
  • Te permite hacer peticiones a propiedades anidadas de los documentos, y también a propiedades de tipo array.
  • Aunque no sea necesaria una determinada estructura de datos en las colecciones, puedes indexar propiedades para un mejor rendimiento a la hora de hacer peticiones.
  • Está pensada con la escalabilidad en mente, pudiendo dividir la base de datos en diferentes servidores, o incluso una misma colección.
  • MapReduce y Aggregation framework (ver más adelante)

MongoDB vs SQL

Aquí podemos ver de una forma sencilla cómo se realizan unas operaciones básicas de escritura/lectura en MySQL y en MongoDB para así tener una idea inicial:

Facebook

MapReduce y Aggregation framework

Unas de las características principales de MongodoDB son estos sistemas que nos permiten un sistema de peticiones más eficientes y con más lógica. Estos sistemas están pensados para que en vez de tener que traerte todos los datos de la base de datos y procesarlos en tu aplicación, aparte pueden mejorar rendimiento y tiempos de transferencia entre la aplicación y MongoDB, sobretodo si tienes varios servidores MongoDB ya que se puede distribuir la carga entre ellos. Este sistema permite ejecutar funciones como contar, sumar, projections para modificar la estructura de documentos, agrupaciones, etc. Y todo de una manera como una serie de ejecuciones en vez de una gran query, es decir que puedes hacer una query para sacar unos datos, aplicarle una projection para modificarlos, después otra query al resultado del paso anterior, después sumar, etc.

Resumen final

Ya es un producto bastante maduro así que nos sería difícil explicar en detalle todo lo que tiene MongoDB, pero en dejamos aquí un resumen de lo bueno y de lo malo de usar MongoDB.

Pros

  • Base de datos de tipo Documentos
  • Índices muy flexibles
  • Todo funciona con javascript
  • MapReduce y Aggregation framework
  • Replicasets y Sharding para distribuir la carga entre diferentes servidores
  • Múltiples "engines" para casos más avanzados, ya que se puede modificar el sistema de escritura/lectura por si necesitas más velocidad a la hora de escribir o tu aplicación se utiliza mucho querys de una forma determinada.
  • Desde la versión 4, hay transacciones.

Contras

  • No se pueden hacer "joins" entre datos de diferentes colecciones, pero eso te fuerza a generar un modelo de datos diferente gracias al sistema de documentos que te ayudará a mejorar los tiempos de lectura y a tener querys más sencillas.
  • No hay stored procedures, pero a cambio están mapReduce y aggregation framework

Nuestro sitio web utiliza cookies para mejorar su experiencia de navegación. Al utilizar nuestro sitio, usted acepta nuestro uso de cookies. Leer más...