11 noviembre, 2008

Alternativas a las bases de datos relacionales

Una de las razones por las que se habla tanto de CouchDB es que supone una rotura importante con todo aquello que durante años hemos considerado sagrado: que las bases de datos relacionales eran el camino correcto.

Ciertamente, ha existido una clasificación no oficial de las bases de datos en la que Access resultaría ser un juguete, MySql sería el simpático, potente y gratuito equivalente a Linux y Oracle sería el no va más, el último escalón. Sin embargo, esa clasificación basada en marcas esconde el hecho de que todas ellas son bases de datos relacionales. Quizás nunca se hubiese llegado al punto actual de replanteamiento de alternativas de no ser por la cantidad de sitios web que, obligados a servir millones de páginas diarias, han chocado con una más que importante limitación: la escalabilidad.

Tanto CouchDB, como Graphd (la base de datos usada por Freebase), como muchas otras que estan surgiendo, siguen un patrón muy similar orientado a facilitar la escalabilidad de los servidores. La idea es seguir un modelo en el que cualquier modificación (inserción, modificación o eliminación) implica escribir un nuevo registro al final del espacio disponible pero sin eliminar el registro anterior, de tal forma que queda documentado en un histórico de modificaciones al estilo de un wiki, pudiendo conocer el estado de un registro en cualquier momento del pasado.

En general, estas bases actuan como un almacén de tuplas en las que se incluyen, entre otros campos, un identificador y un campo de tipo texto capaz de albergar datos de cualquier tipo de un modo 'semi-estructurado'. Por ejemplo, CouchDB apuesta por Json. Un buen ejemplo es lotsofwords.com, proyecto de Carlos Villela que ha utilizado CouchDB para guardar los 120GB de datos de la wikipedia (más de 21 millones de documentos) y permitir búsquedas de todo tipo en unos 200 milisegundos.

Para realizar una consulta, algunos optan por utilizar un registro en el que se dejan vacíos los campos que se quieren consultar y se rellenan los campos que se quieran introducir para filtrar la búsqueda. Otros solicitan una función de filtrado. Posteriormente, se usan distintas técnicas (como Map+Reduce) para filtrar los registros y clasificarlos.

Además, se plantea una relajación del estándar ACID (Atomicidad, Consistencia, aIslamiento y Durabilidad) en favor de la disponibilidad y alejándose de la consistencia en lo que se conoce como BASE. El objetivo es aumentar el rendimiento mediante el uso de una 'cola de cambios' que es tratada posteriormente por otro proceso o en un momento de menor carga del sistema. La consecuencia inmediata es la aparición de posibles incoherencias entre el momento de la operación y el momento en el que el procesamiento de los mensajes de la cola que aseguran que los datos recuperan su coherencia.

En cualquier caso, se trata de importantes novedades a la hora de almacenar la información después de décadas en las que las bases de datos relacionales han sido prácticamente la única alternativa disponible.

Publicar un comentario en la entrada

Últimos links en indiza.com