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
[email protected]
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.