Our Blog

NoSql: Una nueva forma de base de datos – Parte I

Actualmente con el uso masivo de Internet y la posibilidad de usar desde nuestros teléfonos aplicaciones como Facebook o Twitter es muy común que la cantidad de información que se genera día a día vaya en incremento, ademas de esto la cantidad de personas que utilizan nuestras aplicaciones al mismo momento tiene un volumen significativo.

Ahora bien con este flujo de información es muy común pensar en cuan escalable o perfomante es mi aplicación. Para todos los que normalmente utilizan base de datos relaciones (son las que siguen al pie de la letra el concepto de ACID como ser Oracle, DB2, MySql, Postgres entre otras) saben que la operación de escritura o lectura si bien no es costoso cuando son cientos de miles por segundo, se vuelve grave cuando nuestra aplicación empieza a recibir un flujo importante de consultas.

Otro problema que historicamente existe es que nuestro esquema de base de datos es muy cambiante, ya sea por necesidades propias del negocio o por performance para obtener los datos de forma mas rapida. Por estos motivos es que nace NoSql.

¿Que es NoSql?

NoSql, que significa “no solo SQL”, se refiere a un nuevo tipo de base de datos en las cuales no respeta al pie de la letra el principio de ACID  (Atomicity, Consistency, Isolation, Durability) ya que priorizan otro tipo de cosas como ser la escalabilidad, la performance y la flexibilidad de poder cambiar la forma en que se almacenan los datos. Ademas no poseen una estructura de tablas rigidas como las base de datos tradicionales por lo cual es muy fácil añadir o quitar campos sin la necesidad de ejecutar un sentencia.

Algunas de las implementaciones de este tipo de base de datos que podríamos mencionar son: CouchDB, MongoDB, RavenDB, Neo4j, Cassandra, BigTable entre otras.

Ventajas

Veamos algunas de las ventajas que proveen este tipo de base de datos:

  • Permiten manejar volúmenes enormes de información con una velocidad de acceso rapida
  • Son fácilmente escalables
  • Se pueden ejecutar en cluster en maquinas con características de hardware no muy pontentes y baratas
  • Poseen estructuras de datos flexibles, añadir campos (columnas en las base de datos relacionales de forma dinámica).
  • La gran mayoría son open-source y lo único que cobran es el asesoramiento o alguna herramienta especifica.

Hay que tener en cuenta que si bien hay mas ventajas que las mencionadas aquí, las mismas no se aplican a todas las base de datos.

¿Que diferencias tienen con las bases de datos tradicionales?

Mas allá de las ventajas que se mencionan en el apartado anterior veamos cuales son las grandes diferencias que hay entre las base de datos relacionales y las no relaciones:

  • No usan SQL como lenguaje para realizar las consultas. La mayoría de las base de datos NoSql tienen formas distintas de realizar las consultas por medio de algún lenguaje de apoyo, por ejemplo MongoDB utiliza JSON y Cassandra utiliza el lenguaje CQL.
  • Usan una arquitectura distribuida. Con este tipo de arquitectura se nos permite tener la información de forma compartida entre varias maquinas.
  • No permiten operaciones de JOIN. La mayoría de las base de datos NoSql al manejar grandes volúmenes de información la realización de un JOIN es algo costoso por lo cual la forma de hacerlo es mediante el software (o sea obtener un registro en particular usar un dato clave de ese registro para buscar en la otra tabla).
  • No existe un estandar para todas. La gran diferencia con las bases de datos relaciones radica existen varias formas de almacenar la información (documentos de tipo JSON, clave-valor, etc).

¿Son usadas por grandes empresas?

Este tipo de preguntas es la que se hacen muchas personas hoy en día, ya que sienten cierta desconfianza ante este tipo de Base de datos relativamente nuevas debido a que en muchos casos confían en el viejo esquema de base de datos relaciones. Veamos en el siguiente cuadro algunos ejemplos de empresas que las usan:

Base de datos Empresas
Cassandra Digg, Twitter, Rackspace, IBM,  Reddit, Adobe, HP, Netflix, openwave, Facebook, WebEx
 HBase Adobe, Powerset, Stumbleupon, Yahoo, Twitter, Facebook
 MongoDB  .SAP, MTV, Athena Capital Research, Disney, IGN, The National Archives, Guardian, NYTimes, Forbes, Foursquare, LexisNexis, CERN, Springer, and Doodle
 Redis  Github, The Guardian, Craigslist

¿Cuando usar una base datos NoSql versus una relacional (SQL)?

Esta pregunta es la que muchos desarrolladores se hacen cuando comienzan una aplicación y lleva a muchas discusiones acerca de cuando es mas adecuada una con respecto a otra. Veamos cuando seria recomendable el uso de las base de datos NoSql:

  • Cuando queremos hacer flexible nuestro esquema pudiendo tener distintos datos en cada inserción.
  • Usar hardware mas barato para realizar un escalamiento horizontal con poco costo.
  • Cuando los volúmenes de información crecen de forma muy rápida (por ejemplo 1TB en unos pocos dias) y se necesita una rápida velocidad de respuesta a consultas muy complejas
  • Tenemos picos de muchos usuarios conectados a nuestra aplicación que realizan operaciones costosas.

Conclusiones

A lo largo de esta breve introducción sobre base de datos NoSql hemos visto que presentan numerosas ventajas con respecto a las tradicionales pero siempre se debe tener en cuenta cuando es mas conveniente usar una y otra ya que para todos los casos no es conveniente usar una NoSql. Debe pensarse a la hora de crear una aplicación cuanto puede cambiar el esquemd de datos, cuanto puede llegar a escalar, cuantas personas la van a acceder de forma concurrente y tomar en base a eso nuestra decisión.

No comments
TeraswapNoSql: Una nueva forma de base de datos – Parte I

Related Posts