Introducción
Actualmente podemos encontrarnos con numerosos gestores de base de datos, que van desde Oracle, MySql, SqlServer, TransacSQL a otros no tan conocidos como Aerospike, CouchBase, Tokyo Cabinet, Big Table, MenCacheDB, etc.
Podemos realizar una división entre estos dos grupos de sistemas de gestión de bases de datos, por un lado tenemos los sistemas que utilizan SQL como el lenguaje para obtener y modelar los datos en la base de datos (Oracle, MySql, SqlServer,…). Por otro lado están los sistemas que no utilizan SQL (NoSQL) y que tienen lenguajes propietarios para modelar la base de datos (Aerospike, CouchBase, Big Table, Cassandra,…)
Recordemos que SQL es un lenguaje de consulta estructurado, SQL nos permite acceder a las bases de datos y obtener cualquier información o realizar operaciones con los datos. Utiliza el algebra y el cálculo relacional para obtener los datos de una manera sencilla.
Este estándar se utiliza mayoritariamente en la gestión de bases de datos, fue a principios de los 70 cuando se empezó a trabajar en el lenguaje SEQUEL, que es de dónde viene el lenguaje SQL. No obstante, hasta casi diez años después en 1979 no se introdujo comercialmente, fue en esta fecha cuando Oracle lo lanzo por primera vez en una aplicación comercial.
Las bases de datos No-SQL tienen en común que no utilizan el estándar SQL como lenguaje de interacción con las bases de datos, así pues cada una de ellas puede tener su propio lenguaje propietario e incluso su propia estructura. En cuanto a estructura se refiere podemos dejar a un lado las bases de datos relacionales para encontrarnos con bases de datos de tipo clave-valor (key-value), documentos Jason o XML, orientadas a grafos u orientadas a columnas, etc. Así pues, podemos observar que la manera de relacionar los datos en estas bases de datos no tienen porque utilizar el modelo entidad-relación.
Podemos encontrar varios inconvenientes siempre que trabajemos con bases de datos que no utilicen el estándar SQL, entre estos podemos encontrarnos con problemas para encontrar gente formada en este tipo de base de datos en particular, ya que al salirse del estándar SQL será más difícil encontrar soluciones a los problemas que puedan ir surgiendo con la base de datos.
Otro de los problemas de difícil solución que podemos encontrarnos es que este tipo de base de datos es la dificultad que podemos encontrar a la hora de migrar la aplicación a otro tipo de base de datos, por lo que, es posible que no podamos cambiar de sistema de gestión de base de datos tan fácilmente como cuando utilizamos un sistema basado en SQL.
Como ventajas, podemos observar que los sistemas de gestión de bases de datos basados en SQL utilizan el modelo relacional, en determinados casos este modelo no se adapta a tu modelo de negocio, por lo tanto, podemos encontrarnos con otros modelos que se adapten mucho mejor al modelo de negocio que quieres implantar.
La velocidad es una de las características más importantes que podemos obtener de un tipo de base de datos de este tipo. Por ejemplo, si necesitamos un modelo basado en estructuras de grafos, podemos encontrar bases de datos No-SQL basados en este modelo, que nos permitirán obtener los datos con mucha más velocidad que otros modelos basados en el modelo relacional y que queramos utilizarla para hacer consultas de tipo de estructura de grafos.
Podemos encontrar numerosos modelos diferentes, por ejemplo, el modelo Big Table de Google, es un modelo que está basado en columnas, Neo4j es una base de datos basada en grafos, HBase es una base de datos basada en el mapeo de columnas, Redis está basada en el tipo clave-valor.
Como podemos ver, hay numerosos tipos de bases de datos con unas diferencias en su estructuración considerables debido a esto es posible encontrar un SGBD que se adapte a las necesidades del cliente.
Características de Big Table
Big Table es un SGBD que creó Google para gestionar sus bases de datos en el año 2004, entre las características más importantes del desarrollo es que querían conseguir un sistema que fuese escalable fácilmente, el sistema iba a ser distribuido en multitud de máquinas y necesitaban que fuese altamente eficiente.
Google puso en marcha este proyecto porque los sistemas de bases de datos tradicionales no le convencían lo suficiente para almacenar grandes cantidades de datos, además la rapidez que ofrecían estas bases de datos no eran lo suficiente cuando hablamos de grandes cantidades de datos. La mayoría de los SGBD fueron diseñados para trabajar en un servidor o en arquitecturas poco escalables en comparación con lo que Google necesitaba para tratar sus enormes cantidades de datos, del orden de Petabytes.
Es un sistema que divide la información en columnas, para almacenar la información utiliza tablas multidimensionales compuestas de celdas, cada uno de estas celdas dispone de varias versiones para poder realizar un seguimiento de los valores que ha ido tomando esa celda en el tiempo. Como concepto podría entenderse como un mapa multidimensional dónde podemos ver las filas, las columnas y por último el tiempo.
El sistema de archivos que utiliza Big Table es el denominado GFS (Google File System), que no es más que un sistema de archivos distribuido del mismo propietario (Google).
Una característica muy importante de este sistema es la compresión de los datos, Big Table utiliza dos algoritmos de compresión muy rápidos para comprimir los datos. No obstante, con este algoritmo Big Table nos permite obtener parte de los datos sin tener que descomprimir el dato en su totalidad. Esto les da cierta flexibilidad y sobretodo velocidad frente a otros gestores de datos. Las estimaciones de velocidad en compresión y descompresión de datos apuntan a los valores de 100 – 200 MB/s y 400 – 1000 MB/s respectivamente.
Como viene siendo habitual en Google, el API de Big Table es de acceso público, por lo que cualquier persona puede acceder al API y realizar cualquier prueba o desarrollo. No obstante Big Table 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++.
Google utiliza este sistema de gestión de base de datos en muchas de sus aplicaciones entre otras en Gmail, Google Book Search, Google Finance, Google Reader, Google Maps y Google Analytics.
GFS (Google File System)
GFS está desarrollado para poder almacenar información sobre un sistema de ficheros distribuidos, de una manera rápida y eficaz, además GFS le da mucha importancia a la seguridad de los datos. Este sistema no guarda los datos en un mismo ordenador o servidor sino que cada vez que almacena un dato realiza varios trozos (chunk) y almacena hasta tres copias de cada trozo.
La arquitectura tiene dos tipos de ordenadores diferentes. Por un lado están los de tipo Master que almacenan la dirección dónde están guardados los trozos que componen los ficheros. Por otro lado, están los Chunk Server, que son los ordenadores o servidores que tienen almacenados los datos. Con esta jerarquía de trabajo logran no saturar los servidores Maestros de peticiones y respuestas de datos ya que ellos redirigen el trabajo a los Chunk Server, que serán los encargados de enviar los datos al usuario final.
Estos Chunk Server son los encargados de almacenar y enviar los datos, cuando almacenan no distinguen entre operaciones ya que solo utilizan la operación de escribir datos, es decir, solo es posible añadir datos, no se sobrescriben como otras muchos sistemas de almacenamiento de datos.
Este sistema tiene la capacidad de asignar más recursos a los ficheros que más se utilizan logrando así que la asignación de recursos no sea homogénea y se pueden liberar recursos de ficheros que se utilizan menos a otros ficheros que se utilizan más.
Por último, comentar que GFS es un sistema de archivos que no está dentro del sistema operativo, sino que es accesible por medio de librerías, esto nos permite utilizar GFS con varios sistemas operativos y no depender del sistema operativo.
Desarrollar con Google y Big Table
Google pone a la disposición de los desarrolladores un plugin (Google Web Toolkit) que se incorpora en el entorno de desarrollo Eclipse, con el cual podrás desarrollar directamente desde este IDE. Una vez realizado esto podrás publicar tus aplicaciones desde la propia interface de Eclipse.
Puedes encontrar más información en la página que Google pone a disposición de los desarrolladores: la guía del desarrollador.
Por último, para poder utilizarlo debes de tener una cuenta de Google vinculada al AppEngine.
Links relacionados:
http://es.wikipedia.org/wiki/BigTable
http://es.wikipedia.org/wiki/NoSQL