Download Un Relevamiento de Motores de Bases de Datos NoSQL
Document related concepts
Transcript
Un Relevamiento de Motores de Bases de Datos NoSQL Barrios, Federico Facultad de Ingenierı́a, Universidad de Buenos Aires, Avenida Paseo Colón 850, Ciudad Autónoma de Buenos Aires, Argentina fbarrios@fi.uba.ar http://ingenieria.uba.ar/ Resumen En el presente trabajo se presenta una introducción a los motores de base de datos que pertenecen a la llamada categorı́a NoSQL. A pesar de que ya se han realizado relevamientos similares al abordado aquı́, los mismos se encuentran desactualizados y no contemplan los motores más populares de la actualidad. Debido a que los sistemas no relacionales presentan caracterı́sticas tan dispares, se repasan las particularidades fundamentales de cada uno, de manera tal que el lector pueda contar con un resumen de las tecnologı́as más importantes de la actualidad. Palabras clave bases de datos, NoSQL, no relacionales, relevamiento 1. Introducción Desde la publicación de Edgar Codd “A Relational Model of Data for Large Shared Data Banks” en 1970 [1], su modelo relacional se ha difundido masivamente y ha sido usado por la mayorı́a de las organizaciones que almacenan grandes volúmenes de información para análisis posterior [2]. Sin embargo, en los últimos años han surgido una gran variedad de alternativas debido a la necesidad de adaptarse a las necesidades que provee la Web 2.0; en donde se prioriza la rapidez en operaciones simples de consulta en información que puede estar distribuida en varios servidores [3] sobre un modelo de datos que no es estricto [4]. Otras razones para abandonar el clásico esquema relacional incluyen: La necesidad de alta capacidad de procesamiento. La necesidad de escalamiento. La necesidad de obtener un mejor desempeño a costas de perder transaccionalidad. El costo innecesario del uso de objetos. La dificultad del lenguaje SQL para algunas consultas [5]. Estas nuevas bases de datos han sido denominadas NoSQL. Aunque la definición de este término no es estricta y varı́a de acuerdo a los autores [5][6], la 2 Barrios, Federico mayorı́a de las descripciones coinciden en que básicamente lo único que tienen en común es que no utilizan el modelo relacional [2]. Una de las diferencias más importantes de los primeros motores NoSQL con respecto a los sistemas relacionales es el alejamiento de las propiedades de transaccionalidad conocidas bajo el acrónimo de ACID. Estas propiedades garantizan que una transacción se vea como una sola operación lógica, proveyendo atomicidad (una operación se completa al finalizar todos sus pasos, y revirtiéndose de otra manera), consistencia (la información de una base de datos siempre permanece en un estado consistente), aislamiento (todas las transacciones son independientes) y persistencia (los efectos de una operación son permanentes una vez que se completa) [7]. Las necesidades de la Web moderna han obligado a los desarrolladores a manejar volúmenes muy grandes de información que debe estar disponible velozmente. Es por esto que los sistemas NoSQL pioneros ofrecen “consistencia eventual”, en dónde no necesariamente todos los usuarios observen la misma versión de la información de manera instantánea. Se garantiza, en cambio, que cuando cesen las actualizaciones, todas las réplicas convergerán hacia la misma revisión. Esto sucede en concordancia al Teorema CAP, enunciado por Eric Brewer, que dicta que un sistema sólo puede proveer dos de las siguientes tres propiedades: consistencia fuerte, alta disponibilidad y tolerancia a distribución [8]. 2. Categorı́as de motores Aunque por el momento no exista una taxonomı́a estandarizada, se han hecho varios intentos para clasificar los motores de bases de datos no relacionales [9]. Se escogerá la categorización propuesta por Hecht y Jablonski, que compara los motores según los modelos de datos que ofrecen [4]: Clave–Valor: el concepto de este modelo de datos es idéntico al de las tablas de hash, en dónde se almacenan un conjunto de claves y sus valores asociados [10], pero usualmente implementadas de manera distribuida [11]. Documentos: este modelo es similar al anterior, con la diferencia de que permiten realizar consultas por atributos presentes en sus valores. Columnas: también llamado “de registros extensibles”, este tipo es el más parecido al modelo relacional [12], y separa la información en filas accesibles mediante una clave primaria que cuentan con un número arbitrario de columnas. Grafos: este modelo simplemente representa la información como un grafo usando vértices y aristas. Algunos autores no incluyen este modelo en su análisis [2][3]. 2.1. Motores de almacenamiento de pares clave–valor Estos motores se caracterizan por la simplicidad del modelo de datos; aquı́ se tiene un sólo ı́ndice de acceso para toda la información de la base. Es por ello que este tipo es muy útil para operaciones simples y veloces. Un Relevamiento de Motores de Bases de Datos NoSQL 3 Se adjunta a continuación el gráfico de un estudio mensual que describe la popularidad en función del tiempo de los motores de bases de datos no relacionales de tipo clave–valor realizado por la consultora solid-IT 1 . Se analizarán los motores más importantes de acuerdo a los resultados del mencionado informe. Puntaje [log] 100 Redis Memcached Riak Amazon DynamoDB Ehcache Hazelcast Berkeley DB Amazon SimpleDB Coherence Oracle NoSQL 10 14 ov 14 14 N O ct 14 Se p go 14 14 A Ju l 14 Ju n M ay 14 14 br A ar 14 M 14 Fe b e 13 En ic D N ov 13 1 Figura 1. Ranking de popularidad de los motores de base de datos de tipo clave–valor según solid-IT.at [13]. 2.1.1. Redis Redis es un motor de código libre (bajo licencia BSD) cuyo desarrollo fue iniciado por Salvatore Sanfilippo en 2009 [14]. La descripción del sistema según su equipo aleja a Redis de los motores de tipo clave–valor convencionales, argumentando que es una evolución: un servidor de estructuras de datos. Las claves que residen en la base de datos pueden ser cualquier tipo de contenido binario, desde una cadena común hasta el contenido de un archivo de imagen. Además, sus valores asociados pueden ser cadenas, tablas de hash, listas, conjuntos y mapas de bits [15]. Varios autores están de acuerdo en que la gran disponibilidad de operaciones de alto nivel para manejar las estructuras de datos nativas contribuyen a la popularidad del motor [16][17]. Una caracterı́stica muy importante sobre el funcionamiento de Redis es que siempre almacena toda la información de la base de datos en memoria, utilizando los discos rı́gidos como respaldo en caso de cortes de energı́a. Esta decisión de diseño tiene como consecuencia que la lectura de registros es muy veloz pero la cantidad de registros almacenadas es limitada, dado que no puede exceder el tamaño de la memoria [18]. Esto conlleva a que surja un “patrón de diseño usual” que implica usar un motor como Redis como espacio de caché, haciendo uso eficiente de las estructuras de datos que provee, junto con un motor de base de datos persistente en disco que incluso puede ser relacional [16]. 1 solid-IT. IT consulting & software development. http://solid-it.at/ 4 Barrios, Federico El equipo de Redis ha anunciado en septiembre de 2014 que cuenta con más de 3000 clientes que abonan por el servicio y más de 17.000 usuarios en total [19], que incluyen sitios de alto tráfico como Twitter, Github, StackOverflow y Flickr [20]. 2.1.2. Memcached Memcached fue desarrollado por Brad Fitzpatrick en 2003, originalmente para LiveJournal [21]. Es de código libre y es considerado como uno de los sistemas NoSQL más maduros y de mayor impacto [22]. Los datos que maneja este motor se componen de una clave, un valor, una fecha de expiración y un conjunto de parámetros opcionales. Memcached considera a los tipos como completamente genéricos ya que la información debe ser serializada antes de ser almacenada, argumentando que el servicio de almacenamiento no puede perder tiempo procesando información que puede ser solicitada por cientos o miles de servidores en simultáneo [23]. Memcached, como Redis, también se caracteriza por hacer que la base de datos resida enteramente en memoria, y su función principal es la de optimizar las aplicaciones web alivianando la carga de las bases de datos [21]. Consecuente a esto existe una solución llamada MemcacheDB que adopta el protocolo de Memcached, agregándole lógica de persistencia basada en Berkeley DB [5][24]. A pesar de su simplicidad, este motor pertenece a un conjunto que ha inspirado a muchos de los más importantes motores de la actualidad, puesto que demostró que los ı́ndices en memoria pueden ser altamente escalables [3]. Otras fuentes como [25] destacan el rol de este motor en el funcionamiento cotidiano de Internet. 2.1.3. Riak Riak es un motor de bases de datos de código libre escrito en Erlang. Su primera versión fue lanzada por la empresa Basho en 2009 [3] y al momento de redacción del presente trabajo se encuentra en su versión 2.0.2 [26]. Basho destaca para Riak los objetivos de alta disponibilidad, simplicidad, escalabilidad y la carencia de un servidor principal. Por este motivo se propone como una solución ante la necesidad de información que debe estar distribuida en más de cinco servidores debido a su volumen y cuando el tiempo de inactividad es inaceptable. Una particularidad de este motor es su versatilidad al permitir su uso tanto de consistencia eventual como de consistencia fuerte [26]. Este motor utiliza un modelo sencillo de clave–valor para almacenar los datos, permitiendo guardar cualquier tipo de objetos en disco en su representación binaria, desde texto hasta imágenes incluyendo cualquier tipo de documento como JSON, XML y HTML [27][28]. Redmond y Wilson afirman que Riak ofrece más posibilidades para la web que ningún otro motor de base de datos, dado que provee una interfaz HTTP REST [17] junto con bibliotecas para las plataformas más utilizadas como Java, Python, Perl, Erlang, Ruby, PHP, .NET, entre otras, junto con soporte integrado Un Relevamiento de Motores de Bases de Datos NoSQL 5 para MapReduce [27]. También incluye funcionalidades más especı́ficas como para navegar entre registros a través de vı́nculos [3] y soporte de expresiones regulares [4]. 2.1.4. DynamoDB DynamoDB fue lanzado al mercado en 2012 y es uno de los motores propietarios que ofrece Amazon (entre otros como SimpleDB, Redshift o RDS) [29]. DynamoDB está basado en Dynamo, otro producto de Amazon, que fue pionero del concepto de consistencia eventual para lograr alta disponibilidad y que ha inspirado varios proyectos NoSQL [3]. DynamoDB ofrece, además, la resolución automática de conflictos entre transacciones sin tener lı́mites en el tamaño de datos [30]. A pesar de ser libre de esquema relacional, este motor acepta el concepto de tabla para referirse a un grupo de elementos, y llama “clave primaria” a la clave por la cual se accede a la información. Sin embargo, también provee acceso a los datos a través de ı́ndices secundarios. Entre los tipos de datos que se permiten almacenar se encuentran los escalares (números, cadenas de caracteres, binarios y booleanos), las colecciones (conjuntos homogeneos y listas y mapas heterogeneos), y el valor nulo [31]. 2.2. Motores de almacenamiento de documentos Cattell define al término “documento” como un registro que no sigue un esquema global y que permite que sus valores sean anidaciones recursivas [3]. La principal diferencia entre este tipo de motores de bases de datos y los analizados en la sección anterior es que los valores asociados a las claves no son opacos al sistema y también pueden ser incluidos en consultas. Esta información generalmente es almacenada en forma de documento JSON o similar [4]. Tal como en la sección anterior, se muestra en la figura 2 el gráfico del estudio de la consultora solid-IT que describe la popularidad de los sistemas del tipo analizado en función del tiempo. 2.2.1. MongoDB MongoDB es un motor de base de datos de código libre (GPL) escrito en C++ y desarrollado durante 2007, pero su primera versión fue publicada en 2009 [3]. MongoDB provee tres caracterı́sticas de diseño: alta eficiencia, alta disponibilidad y fácil escalabilidad [33]. Debido a esta facilidad para manejar proyectos de todo tipo, Redmond lo caracteriza como una herramienta versátil [17]. Este motor soporta operaciones atómicas en un documento, y según su documentación oficial, muchas veces esta propiedad es suficiente para resolver los problemas que en un esquema relacional necesitarı́an de ACID [34]. Esta caracterı́stica es particularmente señalada por Abramova y Bernardino, junto con la 6 Barrios, Federico MongoDB CouchDB Couchbase MarkLogic RavenDB Cloudant GemFire OrientDB RethinkDB Datameer Puntaje [log] 100 10 1 14 ov N ct 14 14 O p 14 Se go A 14 l1 4 Ju n 14 Ju ay M br 14 14 A 14 M ar 14 Fe b e 13 En ic D N ov 13 0,1 Figura 2. Ranking de popularidad de los motores de base de datos de almacenamiento de documentos según solid-IT.at [32]. durabilidad de los datos [12]. Otro aspecto también destacado de este sistema es su potente sistema de consultas [5][17]. Los desarrolladores de Mongo la dominan como la “base de datos NoSQL lı́der” [35], y es efectivamente reconocida como tal por el informe de solid-IT, sólo detrás de los tres motores más importantes: Oracle, MySQL y SQL Server de Microsoft y el motor relacional PostgreSQL [36]. Entre los usuarios más importantes de este sistema se encuentran SourceForge.net, foursquare, The New York Times y bit.ly [5]. 2.2.2. Apache CouchDB CouchDB es un proyecto escrito en Erlang e iniciado por Damien Katz en abril de 2005, y parte del proyecto Apache desde el año 2008 [3][5]. Uno de sus principios de diseño es que sea una herramienta potente y fácil de usar: el sistema está enfocado de manera tal que sus conceptos principales sean sencillos de entender para quién haya hecho trabajo en la web. Por esta razón, su consigna es “relájate” (relax ) [37]. Una de los conceptos que introduce CouchDB es el de “vistas”, que representan la manera principal de acceder a documentos, más allá de las consultas triviales [17]. Estas vistas se definen mediante restricciones a campos y usando funciones JavaScript llamadas map y reduce que tienen responsabilidades similares al MapReduce de Google [5]. Además, existe un comando para materializar las vistas y guardar los resultados hasta que ocurra una actualización [16]. Con respecto a la escalabilidad, este motor ofrece un enfoque nativamente distribuido al replicar la información de manera asincrónica e incremental, proveyendo consistencia eventual [37]. Además, asume que todo puede fallar en el ambiente distribuido, y es por eso que ofrece durabilidad ante fallas de red y de sistema [3][17]. Un Relevamiento de Motores de Bases de Datos NoSQL 2.2.3. 7 Couchbase Server Couchbase es un motor distribuido de propósito general que provee funcionalidades de caché, clave–valor y almacenamiento de documentos [38]. Este sistema surgió como una unión de la compañı́a que brindaba soporte comercial para el proyecto Apache CouchDB, CouchOne Inc., junto con los desarrolladores de la empresa Membase Inc. [39] Couchbase hereda de Membase la funcionalidad para agregar o eliminar servidores elásticamente, moviendo información y redirigiendo pedidos automáticamente en el proceso [3]. Además, ha sido señalado que este motor tiene un mejor manejo de concurrencia que el resto en el rubro [40]. Entre sus clientes se encuentran importantes compañı́as que manejan grandes volúmenes de información como los servicios web LinkedIn, Concur y Orbitz, y sitios de empresas como Cisco y la editorial McGraw-Hill [40][41]. 2.3. Motores de almacenamiento en columnas También llamado “de registros extensibles”, estos motores ofrecen un modelo de datos básico distribuido formado por tablas con filas y columnas, tal como las bases de datos relacionales; sin embargo, en su mayor parte, las tablas no representan relaciones, las filas no son registros y las columnas no respetan un esquema [17]; sino que estas bases contienen columnas extensibles con información muy relacionada [2]. La mayorı́a de estos sistemas, además, están influenciados por el motor usado por Google para su ı́ndice de búsqueda y otros productos como Google Earth y Google Finance, BigTable [3][8]. Se muestra en la figura 3 el estudio realizado por la consultora solid-IT que muestra la popularidad de los proyectos basados en registros extensibles en función del tiempo. 2.3.1. Apache Cassandra Cassandra es un motor de base de datos originalmente desarrollado por Facebook y migrado a código libre vı́a Apache en 2008 [5]. Este motor está escrito en Java y muchos autores describen su diseño como fuertemente influenciado por los sistemas Dynamo de Amazon y BigTable de Google [3][5][9]. La arquitectura de este proyecto introduce el concepto de “supercolumnas” como contenedores de columnas [3]. Estas agregan un nivel de agrupamiento: cada base de datos almacena familias de columnas, en dónde cada una contiene columnas o bien supercolumnas que pueden ser agregadas o eliminadas dinámicamente [5]. Este esquema posibilita que la información contenida en la base pueda ser estructurada, semiestructurada o incluso no tener ningún tipo de estructura [12]. El lenguaje que utiliza para manipular los datos almacenados se llama CQL (Cassandra Query Language). Puesto que su sintaxis es similar a SQL, se ha propuesto que es de aprendizaje sencillo [12], aunque se encontró que tiene la reputación de ser complejo [43]. 8 Barrios, Federico Cassandra HBase Accumulo Hypertable Sqrrl Puntaje [log] 100 10 1 0,1 14 N ov ct 14 14 O 14 Se p 4 A go 14 l1 Ju n 14 Ju ay 14 M 14 A br ar 14 M 14 Fe b 13 En e ic D N ov 13 0,01 Figura 3. Ranking de popularidad de los motores de base de datos en columnas según solid-IT.at [42]. Cassandra es un proyecto razonablemente maduro. Es usado por más de 1500 compañı́as incluyendo eBay, GitHub, GoDaddy, Hulu, Instagram, Netflix y Reddit [44]; según el informe de solid-IT se posiciona como la décima base de datos más popular y la segunda del grupo NoSQL [36]. Además, existen investigaciones que la posicionan como uno de los motores lı́deres del movimiento NoSQL en el futuro [43]. 2.3.2. Apache HBase HBase es otro proyecto de código libre bajo licencia Apache escrito en Java. Al igual que Cassandra, también está modelado a partir del motor BigTable de Google [9], al extento de ser llamado “un clon” de este [5]. HBase se describe frecuentemente como un motor de buen desempeño ante grandes volúmenes de datos, brindando escalabilidad extrema, alta disponibilidad y, a diferencia de la mayorı́a de los motores relevados en este trabajo, consistencia fuerte [45]. También tiene algunas funcionalidades que no están presentes en otros sistemas como versionado automático, compresión, recolección de residuos y tablas en memoria [17]. El modelo de datos que usa HBase consiste de filas en una tabla. Cada fila se identifica unı́vocamente con una clave de fila (usada también para distribuir los datos en clústeres), y consta de una colección de pares clave–valor. Esto permite una similitud con el esquema relacional, en donde cada campo se obtiene en la intersección de una clave de fila y una clave “de columna”. Sin embargo como las colecciones no necesariamente deben tener la misma cantidad de valores, las tablas no tienen una cantidad fija de columnas. Adicionalmente se almacena una fecha de modificación para permitir versionado, lo que implica que las coordenadas de un valor en cada tabla es una tupla con la siguiente forma: (clave de fila, clave de columna, fecha de modificación) [45]. Un Relevamiento de Motores de Bases de Datos NoSQL 9 Aunque ha sido mencionado que la documentación del proyecto es pobre [46] y que no tiene un proveedor de servicio propio, HBase cuenta con una comunidad de usuarios que ha sido remarcada por el tamaño y que rápidamente responde preguntas de los usuarios por varios medios de comunicación [17]. 2.4. Motores de almacenamiento en grafos Este tipo de motores resulta muy eficiente para manejar información muy vinculada, enfocándose más en la relación entre los valores que en las caracterı́sticas de sus conjuntos [17]. De esta manera, mientras que consultas en información con muchos enlaces en un esquema relacional se resuelven haciendo costosas juntas, en una base de datos de tipo grafo se pueden reemplazar por recorridos eficientes [4]. Como a lo largo de todo el trabajo, se muestra en la figura 4 el gráfico del estudio de la consultora solid-IT para ilustrar la popularidad de los sistemas de almacenamiento en grafos en función del tiempo. Neo4j Titan OrientDB Sparksee Giraph ArangoDB InfiniteGraph Sqrrl InfoGrid FlockDB Puntaje [log] 10 1 0,1 14 ov N ct 14 14 O 14 Se p 14 l1 4 A go Ju 14 Ju n ay 14 M 14 A br ar 14 M 14 Fe b 13 En e ic D N ov 13 0,01 Figura 4. Ranking de popularidad de los motores de base de datos de tipo grafo según solid-IT.at [47]. 2.4.1. Neo4j Neo4j es una base de datos desarrollada en Java que cuenta con una versión de código libre (GPL) y una versión privativa [48]. Una caracterı́stica destacable de este motor es que es tan pequeño que se puede embeber en casi cualquier aplicación, pero que cuando se lo solicita también puede almacenar miles de millones de vértices y ası́ tantas aristas [17]. Neo4j puede resolver consultas a través de varios lenguajes, incluı́da una interfaz REST, un lenguaje escrito en Groovy que provee una sintaxis similar a 10 Barrios, Federico JQuery llamado Gremlin y un lenguaje basado en SQL y expresiones regulares llamado Cypher [17]. También tiene soporte para SPARQL, un lenguaje de consulta manejado por varios motores de tipo grafo [4][49]. Los recursos oficiales de Neo4j la autodenominan la “base de datos de grafo lı́der”, cosa que se puede comprobar mediante los estudios de solid-IT, que muestran que es por lejos el motor de almacenamiento en grafo más popular, a pesar de que se encuentra en el puesto 26 del ranking total [36]. Neo4j cuenta con miles de usuarios [50], y su creciente popularidad está respaldada por estudios que predicen que el 25 % de las empresas estarán usuario bases de datos de este tipo para el año 2017 [51]. 3. Conclusiones Después de realizar la investigación se ha descubierto que algunos de los motores más populares del momento no fueron relevados en la publicación original de Rick Cattell ni en las actualizaciones publicadas en su sitio web. Esto delata la necesidad de realizar estudios intensivos periódicamente, puesto que el tema que se aborda es de cambio constante. Creemos que también es necesario tener en cuenta que la categorización que Cattell le asigna a los motores puede ya no ser del todo correcta. Varios de los motores relevados aquı́ y originalmente asociados a la categorı́a clave–valor han ido ganando complejidad al punto de soportar mucha funcionalidad, incluyendo el soporte para ı́ndices secundarios y vı́nculos entre valores, acercándolos a la categorı́a de almacenamiento de documentos. Asimismo, en su categorización original, el autor no tiene en cuenta las bases de datos de tipo grafo, que sı́ son consideradas por otros autores como Hecht y Jablonski. Finalmente es necesario notar que todavı́a no existe una publicación que haga una comparación de eficiencia entre un grupo de motores de bases de datos no relacionales. Consideramos que esta es una carencia fundamental y que ningún análisis está del todo completo sin un contraste de ese tipo. Referencias 1. Codd, E. F.: A Relational Model of Data for Large Shared Data Banks. Commun. ACM, 13(6):377–387, Junio 1970, ISSN 0001-0782. http://doi.acm.org/ 10.1145/362384.362685. 2. Leavitt, Neal: Will NoSQL Databases Live Up to Their Promise? Computer, 43(2):12–14, Febrero 2010, ISSN 0018-9162. http://dx.doi.org/10.1109/MC. 2010.58. 3. Cattell, Rick: Scalable SQL and NoSQL Data Stores. SIGMOD Rec., 39(4):12–27, Mayo 2011, ISSN 0163-5808. http://doi.acm.org/10.1145/1978915.1978919. 4. Hecht, Robin y Jablonski, Stefan: NoSQL Evaluation: A Use Case Oriented Survey. En Proceedings of the 2011 International Conference on Cloud and Service Computing, CSC ’11, páginas 336–341, Washington, DC, USA, 2011. IEEE Computer Society, ISBN 978-1-4577-1635-5. http://dx.doi.org/10.1109/CSC.2011.6138544. Un Relevamiento de Motores de Bases de Datos NoSQL 11 5. Strauch, Christof: NoSQL Databases. Lecture: Selected Topics on SoftwareTechnology Ultra-Large Scale Sites, Manuscript, Hochschule der Medien, Stuttgart (Stuttgart Media University), 2011. 6. Fowler, Martin: NoSQL Definition. Martin Fowler Bliki, Enero 2012. http:// martinfowler.com/bliki/NosqlDefinition.html. 7. Bartholomew, Daniel: SQL vs. NoSQL. Linux J., 2010(195), Julio 2010, ISSN 1075-3583. http://dl.acm.org/citation.cfm?id=1883478.1883482. 8. Moniruzzaman, A. B. M. y Hossain, Syed Akhter: NoSQL Database: New Era of Databases for Big data Analytics - Classification, Characteristics and Comparison. CoRR, abs/1307.0191, 2013. http://arxiv.org/abs/1307.0191. 9. Tudorica, B.G. y Bucur, C.: A comparison between several NoSQL databases with comments and notes. En Roedunet International Conference (RoEduNet), 2011 10th, páginas 1–5, June 2011. 10. Cormen, Thomas H., Stein, Clifford, Rivest, Ronald L. y Leiserson, Charles E.: Introduction to Algorithms. McGraw-Hill Higher Education, 2da edición, 2001, ISBN 0070131511. 11. Stonebraker, Michael: SQL Databases V. NoSQL Databases. Commun. ACM, 53(4):10–11, Abril 2010, ISSN 0001-0782. http://doi.acm.org/10.1145/ 1721654.1721659. 12. Abramova, Veronika y Bernardino, Jorge: NoSQL Databases: MongoDB vs Cassandra. En Proceedings of the International C* Conference on Computer Science and Software Engineering, C3S2E ’13, páginas 14–22, New York, NY, USA, 2013. ACM, ISBN 978-1-4503-1976-8. http://doi.acm.org/10.1145/2494444.2494447. 13. solid-IT.at: DB-Engines Ranking of Key-value Stores, Noviembre 2014. http:// db-engines.com/en/ranking/key-value+store, visitado el 2014-11-26. 14. redis.io. http://redis.io, visitado el 2010-09-30. 15. redis.io: An introduction to Redis data types and abstractions. http://redis.io/ topics/data-types-intro, visitado el 2010-09-30. 16. Ippolito, Bob: Drop ACID and Think About Data. Charla dictada durante la PyCon 2009, Marzo 2009. 17. Redmond, Eric y Wilson, Jim R.: Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement. Pragmatic Bookshelf, 2012, ISBN 1934356921, 9781934356920. 18. redis.io: FAQ. http://redis.io/topics/faq, visitado el 2010-09-30. 19. Assay, Matt: NoSQL Databases Are Going Mainstream – They Actually Have Paying Customers, Septiembre 2014. http://readwrite.com/2014/09/23/ nosql-database-redis-labs-ofer-bengal. 20. redis.io: Who’s using Redis? http://redis.io/topics/whos-using-redis, visitado el 2010-09-30. 21. memcached: About Memcached. http://www.memcached.org/about, visitado el 2010-09-30. 22. Howe, Bill: Introduction to Data Science. Online Course, Septiembre 2014. https: //www.coursera.org/course/datasci. 23. memcached wiki: New overview, Agosto 2011. https://code.google.com/p/ memcached/wiki/NewOverview, visitado el 2010-09-30. 24. MemcacheDB, Enero 2009. http://memcachedb.org, visitado el 2010-09-30. 25. Aylward, Lee: Gimme the cache! memcached turns 10 years old, Mayo 2013. http://arstechnica.com/information-technology/2013/05/ gimme-the-cache-memcached-turns-10-years-old-today. 26. Basho Technologies: Riak: Riak Docs: Why Riak? http://docs.basho.com/riak/ latest/theory/why-riak, visitado el 2010-09-30. 12 Barrios, Federico 27. Basho Technologies: Riak. http://basho.com/riak, visitado el 2010-09-30. 28. Basho Technologies: Riak: From Relational to Riak – A Technical Brief. http: //basho.com/assets/RelationaltoRiak.pdf, visitado el 2010-09-30. 29. Amazon Web Services: Running Databases on AWS. http://aws.amazon.com/ running_databases, visitado el 2010-09-30. 30. Brockmeier, Joe: Amazon Takes Another Pass at NoSQL with DynamoDB, Enero 2012. http://readwrite.com/2012/01/18/amazon-enters-the-nosql-market. 31. Amazon Web Services: DynamoDB FAQ. http://aws.amazon.com/dynamodb/ faqs, visitado el 2010-09-30. 32. solid-IT.at: DB-Engines Ranking of Document Stores, Noviembre 2014. http: //db-engines.com/en/ranking/document+store, visitado el 2014-11-26. 33. MongoDB: Introduction to MongoDB. http://docs.mongodb.org/manual/core/ introduction, visitado el 2010-09-30. 34. MongoDB: Frequently Asked Questions. http://docs.mongodb.org/manual/faq, visitado el 2010-09-30. 35. MongoDB. http://www.mongodb.org, visitado el 2010-09-30. 36. solid-IT.at: DB-Engines Complete Ranking, Noviembre 2014. http://db-engines. com/en/ranking, visitado el 2010-09-30. 37. Anderson, J. Chris, Lehnardt, Jan y Slater, Noah: CouchDB: The Definitive Guide – Time to Relax. O’Reilly Media, Inc., 1ra edición, 2010, ISBN 0596155891, 9780596155896. 38. Couchbase Server: About. http://www.couchbase.com/nosql-databases/ about-couchbase-server, visitado el 2010-09-30. 39. Couchbase Server: Couchbase vs. Apache CouchDB – A comparison of two open source NoSQL database technologies. http://www.couchbase.com/ couchbase-vs-couchdb, visitado el 2010-09-30. 40. Oliver, Andrew: Couchbase 2.0: This means war, Diciembre 2012. http://www.infoworld.com/article/2616396/application-development/ couchbase-2-0--this-means-war.html. 41. Couchbase Server: Customers. http://www.couchbase.com/case-studies, visitado el 2010-09-30. 42. solid-IT.at: DB-Engines Ranking of Wide Column Stores, Noviembre 2014. http: //db-engines.com/en/ranking/wide+column+store, visitado el 2014-11-26. 43. Assay, Matt: MongoDB, Cassandra, and HBase – the three NoSQL databases to watch, Noviembre 2014. http://www.infoworld.com/article/2848722/nosql/ mongodb-cassandra-hbase-three-nosql-databases-to-watch.html. 44. Apache Cassandra. http://cassandra.apache.org, visitado el 2010-09-30. 45. Gregan, Rick: Review: HBase is massively scalable – and hugely complex, Marzo 2014. http://www.infoworld.com/article/2610709/database/ review--hbase-is-massively-scalable----and-hugely-complex.html. 46. Gregan, Rick: Big data showdown: Cassandra vs. HBase, Abril 2014. http://www.networkworld.com/article/2175731/applications/ big-data-showdown--cassandra-vs--hbase.html. 47. solid-IT.at: DB-Engines Ranking of Graph DBMS, Noviembre 2014. http:// db-engines.com/en/ranking/graph+dbms, visitado el 2010-09-30. 48. Hoff, Todd: Neo4j - a Graph Database that Kicks Buttox, Junio 2009. http:// highscalability.com/neo4j-graph-database-kicks-buttox. 49. Neo4j Blog: The top 10 ways to get to know Neo4j. http://neo4j.com/blog/ the-top-10-ways-to-get-to-know-neo4j, visitado el 2010-09-30. 50. Neo4j. http://neo4j.com, visitado el 2010-09-30. Un Relevamiento de Motores de Bases de Datos NoSQL 13 51. Bridgwater, Adrian: Is Neo4j 2.1 The Chosen (Graph) One?, Mayo 2014. http:// www.drdobbs.com/database/is-neo4j-21-the-chosen-graph-one/240168338.