domingo 4 de julio de 2010

Las Alternativas NoSQL

Una nueva generación de software de base de datos de alto-desempeño y bajo costo está emergiendo muy rápido llegando a retar el dominio de SQL en procesos distribuidos y aplicaciones con grandes volúmenes de datos. Algunas compañías ya reemplazaron la alta funcionalidad de SQL con estas nuevas opciones que les permiten crear, trabajar y administrar enormes conjuntos de datos.

El aliciente para este movimiento, denominado NoSQL, es que diferentes implementaciones web, empresariales y aplicaciones de cómputo en nube tienen diferentes requerimientos para sus bases de datos. No toda aplicación requiere una consistencia de datos estricta, por ejemplo.

Además, cuando una aplicación usa datos distribuidos en cientos o incluso miles de servidores, los números(en cuestión de dinero) apuntan al uso de software servidor sin costo en lugar de pagar licencias por procesador. Una vez resuelto el tema de los costos de las licencias, se puede escalar horizontalmente con hardware comercial u optar por servicios de cómputo en nube y evitar un desembolso grande de entrada. Las herramientas previas no siempre facilitaban esto.

Desafíos a la hegemonía de SQL vienen de productos especializados construidos desde cero para el análisis a gran escala y almacenamiento de documentos, así como para la construcción de sistemas que requieren de alta disponibilidad más que consistencia cuando se trata de particionar datos.

Aplicaciones tales como las de procesamiento de transacciones en línea, inteligencia de negocios, gestión de relaciones con clientes, procesamiento de documentos y las redes sociales no tienen las mismas necesidades de datos, consultas o tipos de índices, ni tienen requisitos equivalentes de consistencia, escalabilidad y seguridad.

Por ejemplo, las aplicaciones de BI(inteligencia de negocios) ejecutan consultas de análisis y de toma de decisiones que pueden aprovechar los índices bitmap para las operaciones en bases de datos de gigas o terabytes de tamaño. Análisis web, descubrimiento de fármacos, modelos financieros y otras aplicaciones similares voltean hacia los sistemas distribuidos por su procesamiento eficaz de conjuntos de datos de gigas o teras. OLTP es sinónimo de fiabilidad. Y las aplicaciones de redes sociales como Facebook y Amazon.com han adoptado propiedades BASE (básicamente disponibles, flexibles, eventualmente consistentes) por arriba de las ya conocidas ACID (atomicidad, consistencia, aislamiento, durabilidad) para soportar sus comunidades masivas de usuarios web de millones.

Estas diferencias son una razón por las que bases de datos NoSQL no relacionales, bases de datos enfocadas a documentos y de almacenamiento vertical hayan cobrado fuerza. Son más como herramientas especializadas en lugar de Navajas Suizas con funcionalidad de plataformas SQL.

Los arquitectos de sistemas deberían considerar las características y funciones especializadas que necesita una aplicación al momento de elegir una base de datos. Las base de datos NoSQL pueden construirse específicamente para funciones tales como BI, OLTP, CRM, redes sociales y data warehousing, e incluyen características tales como escalabilidad, particionamiento, seguridad y versatilidad.

Escalabilidad y Alta Disponibilidad

Para cómputo en nube y sitios web con altos volúmenes de datos como eBay, Amazon, Twitter y Facebook, la escalabilidad y alta disponibilidad son esenciales. De hecho, son la razón para que en las bases de datos distribuidas se hayan relajado los requerimientos en cuanto a consistencia.

Los sistemas que operan en ambientes de alta disponibilidad deben sobrevivir a fallas de software, hardware y red, y estar listos para escalar a pesar de la impredecible demanda en materia de recursos de cómputo. Un enfoque para la construcción de sistemas es el uso de bases de datos distribuidas con una arquitectura de compartición nula y particionamiento horizontal. Elasticidad y fragmentación (particionamiento) — ambas característics NoSQL — son soluciones de escalamiento horizontal que proveen disponibilidad y procesamiento de grandes volúmenes de datos.

Una variedad de almacenes de datos están cobrando popularidad para la creación de aplicaciones de sitios web escalables y ambientes elásticos tales como la nube pública o privada. Los almacenes distribuidos de clave-valor son estupendos cuando no necesitas aplicar reglas SQL, rigidez de consistencia, consultas complejas, encolamiento integrado o la capacidad de funcionar con bases de datos en operación que exceden la memoria RAM disponible.

Nuevos almacenes de datos de baja-latencia ofrecen escalabilidad para aplicaciones que no requieren de consultas elaboradas ni capacidades analíticas. Amazon ha desarrollado SimpleDB y Google Bigtable. Otras opciones de baja-latencia de código abierto incluyen Cassandra, Hypertable, MongoDB, Project Voldemort, Redis, Tokyo Tyrant y Dynamo, base de datos usada para Amazon V3 que hasta marzo contenía 102 billones de objetos.

Las Opciones

Google ha desarrollado Bigtable para distribuir datos a través de miles de servidores y escalar a conjuntos de datos en el orden de los peta bytes. Aplicaciones como la indexación de la web, Google Earth, Google Maps, Blogger, YouTube y Gmail lo emplean. La colección de 100 millones de videos de YouTube requiere de 600 TB de espacio. Bigtable es propietario, pero el modelo de datos existe en implementaciones de código abierto como Hypertable, Cassandra y HBase. Bigtable puede usarse como entrada o salida de MapReduce, que permite el procesamiento distribuido de archivos o bases de datos usando mapeos o funciones de reducción.

Dynamo fue creado para proporcionar un almacén de datos tipo clave-valor de alta disponibilidad, sin perder cambios en los datos debido a fallas en el servidor o problemas de red. Amazon construyó posteriormente SimpleDB como un almacén tipo clave-valor disponible para los clientes de Amazon Web Services. SimpleDB está limitado a no más de 256 atributos de pares nombre-valor, dominios no mayores a 10 GB y bases de datos de no más de 1 TB. Amazon dice que las copias de los datos son actualizados en un segundo para mantener la consistencia. SimpleDB utiliza un lenguaje de consulta parecido a SQL.

Project Voldemort, un clon de código abierto de Amazon Dynamo, es un almacén de datos clave-valor que soporta versiones, consistencia eventual(donde la base de datos devuelve a veces la respuesta incorrecta con el fin de conservar su tamaño), y particionamiento y replicación automático. Claves y valores pueden ser objetos complejos tales como mapas o listas. El Proyecto Voldemort soporta la construcción de almacenes de datos distribuidos en modo apagado. Los desarrolladores de LinkedIn la crearon, y sitios como Lookery lo utilizan.

Cassandra integra el modelo de datos Bigtable con el diseño distribuido de Dynamo. Ofrece consistencia eventual, no la rígida consistencia que las transacciones de comercio electrónico y operaciones en la Bolsa requieren. En lugar de almacenar los datos en secuencias de fila-principal o columna-principal, Cassandra utiliza el orden ColumnFamily inspirado por Bigtable.

Cassandra es distribuido geográficamente a través de múltiples data centers, tal como están las zonas de disponibilidad de Amazon EC2. Se pueden hacer cargas masivas con Hadoop.

El Costo de Escalar

SimpleGeo, proveedor de datos geográficos, utiliza Apache Cassandra, opción de código abierto NoSQL, para evitar los costos de licencias de gestores de bases de datos comerciales como parte de su esfuerzo para escalar a una arquitectura de base de datos multiservidor.

"Corre un cluster de 50 nodos, que abarca tres data centers del servicio de Amazon EC2 pagando cerca de USD$10,000 al mes", comenta el director de tecnología de la empresa Joe Stump, quien anteriormente utilizó Cassandra en Digg. "En contraste, el soporte premium de MySQL costaría cerca de USD$5,000 por nodo al año, o USD$250,000 por todos al año — más del doble por la implementación de Cassandra" agreaga Stump, "y Microsoft SQL Server puede costar hasta USD$55,000 por procesador al año".

"USD$10,000 es un gasto operable todo lo contrario a un gasto mayor, y eso es 'un poco agradable fiscalmente'", comenta.

Cassandra proporciona disponibilidad y escalabilidad a una cantidad de sitios bastante conocidos, incluyendo las vastas comunidades de Twitter y Facebook. Cuando el número de usuarios de Twitter despegó, migraron de MySQL a una combinación MySQL/memcached más 45 nodos corriendo Cassandra. Ese ambiente combinado se encarga ahora de 50 millones de 'tweets' al día. Facebook agrega cerca de 60 millones de fotos a la semana usando Cassandra. En Digg, Cassandra administra cerca de 3 TB de información.

Digg anunció con bombo y platillo su movimiento de MySQL a Cassandra. La razón principal de Digg para moverse de plataforma fue "lo problemático que se volvió hacer que la aplicación tuviera un alto rendimiento cuando la escritura(en la base de datos) se volvió intensa en un conjunto de datos que crece rápidamente, y al cual no le ves fin" comenta John Quinn, vice presidente de ingeniería de Digg. El crecimiento forzó a Digg a tomar estrategias de particionamiento horizontal y vertical que eliminaron la mayoría de conceptos de una base de datos relacional, y aún así había sobrecarga", agrega Quinn.

"Nuestro sistema crece rápidamente y necesita que se le proporcione rendimiento y redundancia con múltiples data centers y para agregar capacidad o reemplazar nodos con fallas inmediatamente. En cuanto a la consistencia de la información, los ingenieros de Digg pueden implementar controles a nivel aplicación más eficientemente con Cassandra que con MySQL", comenta Quinn.

Tokyo Tyrant es un servidor de base de datos de código abierto, acompañado de un motor de búsqueda de texto, que tiene seguimiento en la comunidad NoSQL. Es una base de datos clave-valor con una estructura de índices hash y b-tree, capaz de insertar 1 millón de registros en 0.4 segundos por registro y de ejecutar 58,000 consultas por segundo. Soporta replicación asíncrona y procesamiento de transacciones con propiedades ACID y registro prematuro de transacciones. Puede usarse con varios lenguajes de programación, incluyendo Perl, Java, Ruby y PHP. Implementaciones productivas incluyen Scribd y Mixi, el equivalente Japonés de Facebook. LightCloud modificó Tokyo Tyrant en una base de datos distribuida escalable horizontalmente agregando una capa hash universal. El diario social Plurk utiliza esta opción de LightCloud Tokyo Tyrant.

Almacenes de Base de Datos de Documentos

CouchDB y MongoDB son ejemplos de bases de datos de documentos de la clase JSON, a la vez que hay un gran número de productos que almacenan documentos codificados en formato XML. MongoDB es un producto popular basado en la arquitectura de base de datos cliente-servidor con índices b-tree y comunicación sobre redes TCP/IP.

MongoDB administra colecciones de objetos JSON y provee de escalabilidad con fragmentación y replicación. Las consultas son objetos JSON además de proporcionar también de búsquedas geoespaciales en 2-D. Existen APIs controladoras para varios lenguajes incluidos JavaScript, Java, Perl, PHP, Python, Ruby y C++. Entre las implementaciones productivas que usan MongoDB destacan Justin.tv, The New York Times, Disqus, Electronic Arts y Business Insider.

CouchDB es un almacén de datos que carece de esquema y proporciona una API estilo REST para operaciones CRUD(crear, recuperar, actualizar, eliminar) sobre documentos. CouchDB puede hacer recuperaciones usando valores clave y puede operar con Hadoop MapReduce para consultas nada triviales. Es posible también la generación de vistas usando funciones JavaScript. Crear una vista puede tomar tiempo, pero las consultas posteriores que la van usan son muy rápidas.

CouchDB soporta replicación multimaster y distribución de datos a través de múltiples instancias. Administra documentos en formato JSON y utiliza el motor JavaScript SpiderMonkey por lo que es muy apropiado para aplicaciones web, como con Erlang, HTTP, JavaScript, PHP, Python y Ruby.

Para aplicaciones donde son preferibles los documentos XML y XQuery sobre los documentos JSON y las consultas en JavaScript, hay una cantidad de productos de código abierto y comerciales. Además de los almacenes de documentos XML, hay una docena de procesadores XQuery. La lista incluye Apache Xindice, Berkeley DB, eXist-db, IBM DB2, MonetDB, Mark Logic, Sedna, WebMethods Tamino y TigerLogic XDMS.

Procesamiento Distribuido

Cuando se trata de procesamiento distribuido de conjuntos de datos masivos, Hadoop MapReduce se ha convertido en la tecnología por excelencia. Investigadores en Yahoo, por ejemplo, lo usaron en 3,800 nodos para ordenar un petabyte de información en 16.25 horas.

Google desarrolló y patentó recientemente MapReduce. La función de mapeo produce una lista de pares clave-valor que MapReduce convierte a una lista de valores.

El Proyecto Hadoop de Apache incluye el Sistema de Archivos Distribuído Hadoop (HDFS), MapReduce, base de datos HBase, lenguaje de análisis Pig, la herramienta de consulta y análisis Hive, entre otros. HBase es un almacén vertical(por columna) distribuido, modelado después de Google Bigtable que puede servir como entrada o salida para MapReduce.

HBase es uno de los muchos almacenes verticales compitiendo en el mercado del análisis e inteligencia de negocios. Almacenar tablas en orden de columna-principal proporciona mejoras de desempeño sustanciales sobre las tablas almacenadas en fila-principal. Beneficios como ubicación mejorada y desempeño del cache hacen que el desempeño de la lectura mejore, sin embargo el desempeño es pobre para escritura. Otros almacenes verticales incluyen Sybase IQ, Vertica y CStore que es una colaboración entre varias universidades y es de código abierto.

El creciente interés de búsquedas semánticas y de información relacionada ha puesto en los reflectores a los almacenes de triples RDF(Resource Description Framework). Estas opciones incluyen AllegroGraph, Bigdata, Garlik, Jena, Ontotext Big-OWLIM, OpenLink Virtuoso, Oracle 11g y Sesame. Varios de estos han sido implementados en Amazon EC2 para explotar el poder del procesamiento distribuido de la nube. Los investigadores de Raytheon BBN usaron también Hadoop MapReduce para crear un almacén RDF distribuido que soporta procesamiento de consulta SPARQL.

Restricciones y Mejores Prácticas

Para asegurar la durabilidad e integridad de la información, las bases de datos SQL proveen de registro de transacciones y replicación. Las opciones NoSQL necesitan algo similar. Cassandra, por ejemplo, soporta ambos. Tokyo Cabinet y HBase soportan registro prematuro. Tokyo Cabinet y CouchDB soportan replicación master-master, mientras que MongoDB soporta replicación master-slave y pares de réplicas.

Los arquitectos que emplean bases de datos orientadas a documentos deben lidiar con como almacenar cada tipo de documento y si les conviene tener o no una base de datos para cada tipo. En vez de separar en bases de datos se puede incluir un atributo que especifique el tipo o usar colecciones.

La nueva generación de almacenes de datos está dirigida a atender necesidades de disponibilidad y escalabilidad, aunque aplican ciertas restricciones para alcanzar su mayor eficacia. Con Amazon SimpleDB, por ejemplo, el tiempo máximo que puede durar una consulta es 5 segundos. Si la consulta demora más, SimpleDB regresa el resultado parcial y la aplicación debe hacer consultas adicionales para complementarla. SimpleDB restringe el resultado de una consulta a un máximo de 250 items, mientras que recientemente Google aumentó el resultado máximo de una consulta del almacén de datos AppEngine a 1,000 items.

En sistemas particionados horizontalmente las consultas que necesitan hacer joins cruzados-fragmentados son costosos, de ahí que el diseño de algoritmos para particionamiento requieran de habilidad y conocimiento en patrones de uso de datos. Cuando se requiere de consultas complejas con agregación, las bases de datos NoSQL no son una buena opción, sin embargo pueden ser fuentes de datos para soluciones separadas encargadas de análisis. Las organizaciones que utilizan almacenes de datos clave-valor a veces necesitan las capacidades de indexación y consulta de SQL. Pueden recurrir a otros programas que soporten indexación y consulta como Lucene de Apache. Independientemente de si la organización usa bases de datos SQL o NoSQL, es una buena idea emplear control de versiones y bases de datos separadas para pruebas y producción.

Para todas las áreas que abordan las opciones NoSQL, todavía nos quedamos con la pregunta de qué software de base de base de datos adoptar. La respuesta depende de cosas fundamentales: ¿Cuánto y qué tipo de datos se almacenarán? ¿Será usado para consultas complejas? ¿Cuantos usuarios concurrentes tendrá? ¿Escalará la base de datos según aumente la cantidad de usuarios e información? SQL o NoSQL, es lo primero a definir.

Vía Dr. Dobbs