Bases de datos NoSQL: Cassandra vs BigTable

2013 julio 30
por classora

Las bases de datos NoSQL son sistemas de almacenamiento de información que no cumplen con el modelo relacional propuesto por Codd a principios de los ochenta, y del que derivan la mayor parte de los RDBMS actuales. En general, el movimiento NoSQL ha surgido para intentar satisfacer necesidades que las bases de datos relacionales no conseguían, como manipular enormes cantidades de información (Big Data) de manera muy rápida.

Concretamente, las bases de datos NoSQL difieren con las bases de datos tradicionales (sistemas OLTP relacionales) en los siguientes puntos:

  • No usan SQL como lenguaje principal de consultas: una gran parte de las bases de datos NoSQL evitan este lenguaje estándar, o simplemente lo utilizan como lenguaje secundario o de apoyo. Por ejemplo, Cassandra utiliza CQL, MongoDB utiliza JSON, y BigTable utiliza GQL, una versión propia de Google basada en SQL. Por su parte, las bases de datos multidimensionales suelen utilizar MDX.
  • No requieren estructuras fijas como tablas para almacenar los datos: se trata de no imponer un esquema prefijado en forma de tablas y relaciones entre ellas, sino de ir más allá, permitiendo almacenar información en otros formatos como clave-valor (similar a tablas hash), objetos, cubos, documentos o grafos.
  • No suelen garantizar transacciones: las propiedades ACID (atomicidad, consistencia, aislamiento y durabilidad) son sacrificadas en las bases de datos NoSQL por una cuestión de rendimiento. En contraposición pueden implementar la llamada consistencia eventual, también conocida como BASE (Basically Available Soft-state Eventual Consistency) que garantiza que la base de datos es consistente sólo cuando no se hayan modificado los datos durante un lapso de tiempo suficientemente grande.
  • No suelen soportar operaciones JOIN: al disponer de un volumen de datos tan extremadamente grande suele resultar deseable evitar los JOIN. Esto se debe a que, cuando la operación no es la búsqueda de una clave, la sobrecarga puede llegar a ser tan costosa que no merece la pena (el servicio tiene que averiguar que nodos debe consultar, realizar consultas en paralelo y esperar las respuestas). Las soluciones más directas consisten en desnormalizar los datos, o bien realizar el JOIN mediante software, en la capa de aplicación.
  • Arquitectura distribuida: así como las bases de datos relacionales suelen centralizar los datos en grandes mainframes, o como mucho en esquemas master-slave (debido a la gran cantidad de bloqueos que se generarían al sincronizar un clúster de servidores), en el caso de las bases de datos NoSQL la información se suele compartir mediante mecanismos de tablas hash distribuidas (DHT) ya que en el fondo se asemejan, en muchos casos, a redes P2P.
  • Escalabilidad horizontal: como consecuencia directa de su arquitectura distribuida, las bases de datos NoSQL pueden escalar de manera flexible ante picos de tráfico o necesidades puntuales de procesamiento. Suelen funcionar bastante bien en hardware de bajo coste (PCs normales) y permiten añadir/retirar nuevas máquinas en caliente.

¿Cuándo utilizar una base de datos NoSQL? En general, cuando detectamos que una base de datos relacional, convenientemente optimizada, no responde adecuadamente a las necesidades de nuestro software. Por ejemplo, si pretendemos desarrollar una aplicación que requiera la lectura/escritura de cantidades gigantescas de datos y pueda dar servicio a millones de usuarios sin perder rendimiento, entonces debemos plantearnos el uso de una base de datos NoSQL. Las grandes redes sociales como Facebook y Twitter, o el propio Google, las utilizan como medio fundamental de almacenamiento de información.

Se puede utilizar una base de datos NoSQL para almacenar toda la información de una aplicación, aunque en la mayoría de los casos se recurre a sistemas mixtos que combinan las bases de datos relacionales (fácilmente manipulables e interrogables mediante SQL) con soluciones NoSQL para aquellas funcionalidades que requieren millones de consultas en tiempo real.

Tipos de bases de datos NoSQL

A continuación enumeramos los modelos de bases de datos NoSQL más populares. No son los únicos que existen, pero desde luego son los que más implantaciones y funcionalidades atesoran:

  • Bases de datos clave-valor: son probablemente el modelo de base de datos NoSQL más popular, representando así el buque insignia de este tipo de tecnologías. Cada pieza de información se obtiene a partir de una clave única. Es como manejar una sola tabla, muy grande y convenientemente indexada. Las bases de datos column-family son una variante que permite más de un valor (columna) por clave. Algunos ejemplos: Cassandra (Apache), BigTable (Google), Dynamo (Amazon), Voldemort (Linkedin), HBase (Hadoop) y Redis.
  • Bases de datos documentales: constituyen uno de las principales modelos dentro de las bases de datos NoSQL. Están diseñadas en torno a un concepto abstracto de documento. Los documentos se parecen, de algún modo, a registros, tuplas o filas en una base de datos relacional, pero son menos rígidos: no se les requiere ajustarse a un esquema estándar ni tener todos los mismos atributos o claves. Estas bases de datos permiten no sólo buscar por clave-valor, sino también por contenido del documento, respondiendo a queries más complejas. Algunos ejemplos: CouchDB, MongoDB, IBM Lotus Domino, Terrastore.
  • Bases de datos multidimensionales: como vimos en el post anterior, estas bases de datos se utilizan principalmente en data warehouses y datamarts, y son una variación del modelo relacional que utiliza cubos OLAP para organizar los datos y expresar las relaciones entre ellos. Esto les permite recuperar, filtrar y realizar cruces de ingentes cantidades de datos, con el fin de generar informes en tiempo récord. Algunos ejemplos: Oracle OLAP, OpenQM, Analysis Services (Microsoft), Mondrian (Pentaho).
  • Bases de datos orientadas a objetos: la información se representa mediante objetos, como los presentes en los lenguajes de programación orientada a objetos (POO): Java, C#, Visual Basic.NET, C++… etc. Un ODBMS (Object Database Management System) aporta funcionalidades de persistencia a estos lenguajes, consiguiendo que los objetos se almacenen en memoria/disco de forma transparente. Ejemplos: Zope, Gemstone, Db4o. Estas bases de datos han tenido un éxito moderado, siendo sustituidas en ocasiones por tecnologías ORM (Object-Relational Mapping) como Hibernate (Java), Propel o Doctrine (PHP).
  • Bases de datos en grafo: representan la información como nodos de un grafo y sus relaciones como las aristas del mismo, de manera que se pueda usar la teoría de grafos para recorrerla. Una base de datos orientada a grafos debe estar completamente normalizada, de forma que cada tabla tenga una sola columna y cada relación solamente dos. Con esto se consigue que cualquier cambio en la estructura de la información tenga efecto local. Algunos ejemplos: InfoGrid, InfiniteGraph, Neo4j, DEX, Virtuoso.

En los próximos apartados analizaremos por encima los orígenes y las características de dos referencias entre las bases de datos NoSQL clave-valor: Cassandra y BigTable.

Cassandra: la referencia Open Source de Apache

El desarrollo de Cassandra fue iniciado por Facebook para intentar solucionar los problemas de rendimiento en la comunicación entre usuarios (entre ellos, la inbox search). Estas características de Facebook combinaban un gran volumen de datos a almacenar con la necesidad de responder en tiempo real. Además, las perspectivas de crecimiento eran muy elevadas.

De esta forma, Cassandra nació con el objetivo de que el software y el hardware necesario para la búsqueda y comunicación entre usuarios fuese altamente escalable, horizontal y relativamente barato. Su éxito hizo que pronto asumiese más protagonismo dentro de la red social.

En el año 2008 Cassandra fue liberada por Facebook, pasando a ser de código abierto. Actualmente es la gente de Apache quien la mantiene. Esta característica hace de Cassandra una base de datos NoSQL realmente interesante, ya que aparte de combinar lo mejor de Dynamo (consistencia eventual) con lo mejor de BigTable (familias de columnas) es gratuita y de libre uso y distribución. Además, está desarrollada en Java, un lenguaje de programación cross-platform.

Las principales características del modelo de datos de Cassandra son las siguientes:

  • Una tabla de datos por cada instancia de Cassandra.
  • Cada familia de columnas puede contener o bien columnas o bien supercolumnas. Las supercolumnas son columnas son la agrupación de n-columnas.
  • Cada columna contiene elementos de la forma clave-valor-tiempo, donde el valor del campo tiempo es definible por el usuario.
  • Cada fila de una tabla puede tomar valores en columnas distintas de una familia de columnas que otra fila, es decir, puede (y suele) haber celdas vacías.

BigTable: la referencia de Google

Big Table es un SGBD que creó Google para gestionar sus bases de datos en el año 2004. Al igual que con Cassandra, el objetivo era conseguir un sistema que fuese fácilmente escalable, que funcionase de manera distribuida en multitud de máquinas y que fuese altamente eficiente.

Google puso en marcha este proyecto porque los sistemas de bases de datos tradicionales no le convencían para almacenar todos los datos que manejaban por aquel entonces. Además, la lentitud de estas bases de datos estaban suponiendo un cuello de botella en la velocidad de sus resultados.

En resumen, BigTable es un sistema que divide la información en columnas, y para almacenar la información utiliza tablas multidimensionales compuestas de celdas. Cada celda dispone de varias versiones para poder realizar un histórico de los valores que ha tomado a lo largo del tiempo. Podría entenderse como un mapa multidimensional dónde podemos ver las filas, las columnas y por último el tiempo. Un modelo muy parecido a Cassandra.

El sistema de archivos que utiliza BigTable es GFS (Google File System), que es un sistema de ficheros distribuido creado por Google bajo demanda (de hecho es un pilar tecnológico que le aporta ventajas competitivas). Una característica muy importante de este sistema es la compresión de los datos: BigTable utiliza dos algoritmos de compresión muy rápidos para reducir el tamaño de los archivos. Además, BigTable permite obtener parte de los datos sin tener que descomprimirlos en su totalidad. Esto le da cierta flexibilidad y velocidad frente a otros gestores de datos.

Como viene siendo habitual en Google, el API de BigTable es de acceso público, por lo que cualquier persona puede acceder al API y realizar cualquier prueba o desarrollo. No obstante, BigTable no se distribuye fuera de Google, aunque se puede acceder a ella a través de Google App Engine. El lenguaje de implantación que utiliza es el lenguaje C y/o lenguaje C++.

Si deseas o necesitas trabajar con alternativas a BigTable, la principal recomendación es HBase, un proyecto de software libre basado precisamente en BigTable, implementado en Java y soportado por la fundación Apache. Además, HBase forma parte del proyecto Hadoop.

Más información

Como en otras ocasiones, si te interesa conocer más información sobre este tema no dudes en contactar con nosotros para que te enviemos documentación adicional. Cuenta con Classora Technologies para estar informado sobre bases de datos NoSQL.

4 Responses dejar uno →
  1. Juan permalink
    noviembre 29, 2013

    Hola, actualmente tengo que preparar un trabajo sobre «Bases de datos NoSQL para data warehouses» por lo que estoy tratando de buscar buena información para documentarme lo mejor posible. Este artículo vuestro me ha encantado. ¿Me podríais indicar algún sitio web donde poder ampliar más información, en castellano al ser posible? .. Muchas gracias.

Trackbacks and Pingbacks

  1. Tecnologías de Big Data: el ecosistema Hadoop | El Blog de Classora
  2. Sistemas NoSQL | Hola!
  3. Sistemas No SQL | Hola!

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS