Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANTONIO SARASA
INTRODUCCIÓN
A LAS BASES DE DATOS
NoSQL
CLAVE-VALOR USANDO
REDIS
Introducción a las bases de
datos NoSQL clave-valor
usando Redis
Antonio Sarasa
Director de la colección Manuales (Tecnología): Toni Pérez
ISBN: 978-84-9180-485-7
Ninguna parte de esta publicación, incluyendo el diseño general y de la cubierta, puede ser copiada, reproducida,
almacenada o transmitida de ninguna forma ni por ningún medio, ya sea eléctrico, químico, mecánico, óptico, de
grabación, de fotocopia o por otros métodos, sin la autorización previa por escrito de los titulares del copyright.
Autor
Antonio Sarasa
Es licenciado en Ciencias Matemáticas, especialidad en Ciencias de la
Computación, por la Facultad de Matemáticas de la Universidad Complutense
de Madrid. Posteriormente estudió las ingenierías técnicas de Informática de
Gestión e Informática de Sistemas en la Universidad Nacional de Educación
a Distancia (UNED). También obtuvo el graduado en Ingeniería Informática
por la Universitat Oberta de Catalunya (UOC). Es doctor en Informática por la
Universidad Complutense de Madrid (UCM).
Actualmente es profesor contratado doctor en el Departamento de Sistemas
Informáticos y Computación de la Facultad de Informática de la UCM.
Asimismo, ha sido profesor tutor de asignaturas de las carreras de Informática
en varios centros asociados de la UNED, y es consultor de la asignatura Bases de
Datos NoSQL del máster de Business Intelligence de la UOC.
Sus áreas de investigación se centran en la aplicación de las técnicas de proce-
sadores de lenguajes y compiladores al desarrollo de aplicaciones. Asimismo,
ha trabajado en temas de patrimonio digital y e-learning, entre los que destaca su
participación en el proyecto estatal de la red de repositorios de material educativo
digital Agrega. Ha realizado más de cincuenta publicaciones en congresos, revis-
tas nacionales e internacionales.
Es miembro de varios comités de estandarización de AENOR.
stelibroestádeidcadoam
E ishiojs.
© Editorial UOC Índice
Índice
Prólogo ............................................................................................ 13
Antonio Sarasa
9
© Editorial UOC Introducción a las bases de datos NoSQL
3. Listas....................................................................................... 63
4. Hash ........................................................................................ 67
5. Conjuntos .............................................................................. 70
6. Conjuntos ordenados .......................................................... 74
7. HyperLogLog........................................................................ 80
Bibliografía.................................................................................. 83
10
© Editorial UOC Índice
Conclusión...................................................................................... 147
11
© Editorial UOC Prólogo
Prólogo
13
© Editorial UOC Introducción a las bases de datos NoSQL
Antonio Sarasa
14
© Editorial UOC Capítulo I. Introducción a las bases…
Capítulo I
Introducción a las bases de datos NoSQL
orientadas hacia agregados
1. Introducción
15
© Editorial UOC Introducción a las bases de datos NoSQL
16
© Editorial UOC Capítulo I. Introducción a las bases…
17
© Editorial UOC Introducción a las bases de datos NoSQL
18
© Editorial UOC Capítulo I. Introducción a las bases…
19
© Editorial UOC Introducción a las bases de datos NoSQL
20
© Editorial UOC Capítulo I. Introducción a las bases…
21
© Editorial UOC Introducción a las bases de datos NoSQL
22
© Editorial UOC Capítulo I. Introducción a las bases…
23
© Editorial UOC Introducción a las bases de datos NoSQL
24
© Editorial UOC Capítulo I. Introducción a las bases…
25
© Editorial UOC Introducción a las bases de datos NoSQL
26
© Editorial UOC Capítulo I. Introducción a las bases…
27
© Editorial UOC Introducción a las bases de datos NoSQL
28
© Editorial UOC Capítulo I. Introducción a las bases…
29
© Editorial UOC Introducción a las bases de datos NoSQL
30
© Editorial UOC Capítulo I. Introducción a las bases…
31
© Editorial UOC Introducción a las bases de datos NoSQL
32
© Editorial UOC Capítulo I. Introducción a las bases…
33
© Editorial UOC Introducción a las bases de datos NoSQL
34
© Editorial UOC Capítulo I. Introducción a las bases…
35
© Editorial UOC Introducción a las bases de datos NoSQL
36
© Editorial UOC Capítulo I. Introducción a las bases…
1 Esto no sucede en todas las bases de datos orientadas hacia agregados, así, por
ejemplo, en las bases de datos documentales, las consultas se construyen utilizan-
do los campos de información y el contenido de los agregados, y se recuperan
como resultado partes de un agregado.
37
© Editorial UOC Introducción a las bases de datos NoSQL
38
© Editorial UOC Capítulo I. Introducción a las bases…
39
© Editorial UOC Introducción a las bases de datos NoSQL
Bibliografía
Mohamed, M. A.; Altrafi, O. G.; Ismail, M. O. (2014). «Relational
vs. NoSQL Databases: A Survey». International Journal of Computer and
Information Technology (vol. 3, págs. 598-601).
Moniruzzaman, A. B. M.; Hossain, S. A. (2013). «NoSQL Database:
New Era of Databases for Big Data Analytics-Classification,
Characteristics and Comparison» [artículo en línea]. ArXiv.org http://
cort.as/-F2Pl.
Pramod, J. S.; Fowler, M. (2012). NoSQL Distilled: A Brief Guide to the
Emerging World of Polyglot Persistence. Addison-Wesley Professional.
Redmond, E.; Wilson, J. R. (2012). Seven databases in seven weeks: a guide to
modern databases and the NoSQL movement. Pragmatic Bookshelf.
Tiwari, S. (2011). Professional NoSQL. John Wiley & Sons.
Vaish, G. (2013). Getting started with NoSQL. Packt Publishing Ltd.
40
© Editorial UOC Capítulo II. Introducción a Redis
Capítulo II
Introducción a Redis.
Una base de datos NoSQL de tipo clave-valor
1. Introducción
41
© Editorial UOC Introducción a las bases de datos NoSQL
2. Principales características
42
© Editorial UOC Capítulo II. Introducción a Redis
43
© Editorial UOC Introducción a las bases de datos NoSQL
44
© Editorial UOC Capítulo II. Introducción a Redis
3. Instalación de Redis
45
© Editorial UOC Introducción a las bases de datos NoSQL
46
© Editorial UOC Capítulo II. Introducción a Redis
47
© Editorial UOC Introducción a las bases de datos NoSQL
48
© Editorial UOC Capítulo II. Introducción a Redis
49
© Editorial UOC Introducción a las bases de datos NoSQL
50
© Editorial UOC Capítulo II. Introducción a Redis
Nombre_Comando Nombre_clave
51
© Editorial UOC Introducción a las bases de datos NoSQL
52
© Editorial UOC Capítulo II. Introducción a Redis
53
© Editorial UOC Introducción a las bases de datos NoSQL
54
© Editorial UOC Capítulo II. Introducción a Redis
Bibliografía
Carlson, J. L. (2013). Redis in action. Manning Publications Co.
Da Silva, M. D.; Tavares, H. L. (2015). Redis Essentials. Packt Publishing
Ltd.
Das, V. (2015). Learning Redis. Packt Publishing Ltd.
Macedo, T.; Oliveira, F. (2011). Redis Cookbook: Practical Techniques for
Fast Data Manipulation. O’Reilly Media, Inc.
Nelson, J. (2016). Mastering Redis. Packt Publishing Ltd.
Redis. Documentation. https://redis.io/documentation.
55
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Capítulo III
Estructuras de datos en Redis
1. Introducción
2. Cadenas
57
© Editorial UOC Introducción a las bases de datos NoSQ
L
58
© Editorial UOC Capítulo III. Estructuras de datos en Redis
59
© Editorial UOC Introducción a las bases de datos NoSQ
L
60
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
BITOP Realiza una operación bit a bit entre varias claves (que contienen
valores de cadena) y almacena el resultado en la clave de destino.
61
© Editorial UOC Introducción a las bases de datos NoSQ
L
Comando Significado
62
© Editorial UOC Capítulo III. Estructuras de datos en Redis
3. Listas
63
© Editorial UOC Introducción a las bases de datos NoSQ
L
64
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
BRPOPLPUSH Es una versión bloqueante del comando RPOPLPUSH. La principal
diferencia con este último comando es que en caso de no existir
elementos para extraer de la lista especificada, entonces se
bloquea al cliente que inició la operación un tiempo especificado
en el mismo comando. Si existen elementos entonces se
comporta exactamente igual que RPOPLPUSH.
LINDEX Devuelve el valor situado en el índice dado de la lista
almacenada (se empieza a contabilizar por 0 al principio de la
lista y por -1 al final de la lista).
LINSERT BEFORE/ Inserta un valor en la lista almacenada antes o después del valor
AFTER pivote proporcionado.
LLEN Obtener la longitud de la lista almacenada.
LPOP Elimina y retorna el primer elemento de la lista almacenada.
LPUSH Inserta todos los valores especificados en la cabeza de la lista
almacenada. Si la clave no existe, se crea una lista vacía antes
de realizar la operación.
LPUSHX Igual que LPUSH, pero debe existir la clave y contener una lista,
en caso contrario no realiza ninguna operación.
LRANGE Devuelve los elementos especificados de la lista almacenada en
el intervalo de valores especificados. Los índices se especifican
empezando desde 0 para el principio de la lista o -1 para el final
de la lista.
LREM Elimina las n ocurrencias de un valor dado de la lista
almacenada, de manera que si n > 0 se eliminan empezando
desde la cabeza a la cola de la lista, si n > 0 se eliminan
empezando desde la cola a la cabeza y si n = 0 se eliminan
todos las ocurrencias de la lista.
LSET Introduce el valor dado en la posición establecida de la lista
almacenada.
LTRIM Recorta una lista para que contenga solo el rango de elementos
especificados por dos índices que indican el comienzo y final de
la sublista (los índices se comienzan a contar desde 0).
RPOP Elimina y retorna el último elemento de la lista almacenada.
RPOPLPUSH Devuelve y elimina atómicamente el último elemento de la lista
almacenada e introduce el elemento en la primera posición de
la otra lista especificada.
RPUSH Inserta todos los valores especificados en la cola de la lista
almacenada. Si la clave no existe, se crea una lista vacía antes
de realizar la operación.
RPUSHX Igual que RPUSH, pero debe existir la clave y contener una lista,
en caso contrario no realiza ninguna operación.
Fuente: elaboración propia
65
© Editorial UOC Introducción a las bases de datos NoSQ
L
Algunos ejemplos de uso en el que son útiles las listas son los
siguientes:
66
© Editorial UOC Capítulo III. Estructuras de datos en Redis
4. Hash
67
© Editorial UOC Introducción a las bases de datos NoSQ
L
Comando Significado
HKEYS Retorna todos los nombres de los campos del hash almacenado.
68
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
69
© Editorial UOC Introducción a las bases de datos NoSQ
L
5. Conjuntos
70
© Editorial UOC Capítulo III. Estructuras de datos en Redis
71
© Editorial UOC Introducción a las bases de datos NoSQ
L
72
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
73
© Editorial UOC Introducción a las bases de datos NoSQ
L
• Filtrado de datos.
• Agrupamiento de datos.
• Comprobar la pertenencia de alguien a algo.
6. Conjuntos ordenados
74
© Editorial UOC Capítulo III. Estructuras de datos en Redis
75
© Editorial UOC Introducción a las bases de datos NoSQ
L
76
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
77
© Editorial UOC Introducción a las bases de datos NoSQ
L
Comando Significado
78
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Comando Significado
79
© Editorial UOC Introducción a las bases de datos NoSQ
L
7. HyperLogLog
80
© Editorial UOC Capítulo III. Estructuras de datos en Redis
81
© Editorial UOC Introducción a las bases de datos NoSQ
L
82
© Editorial UOC Capítulo III. Estructuras de datos en Redis
Bibliografía
Carlson, J. L. (2013). Redis in action. Manning Publications Co.
Da Silva, M. D.; Tavares, H. L. (2015). Redis Essentials. Packt Publishing
Ltd.
Das, V. (2015). Learning Redis. Packt Publishing Ltd.
Macedo, T., & Oliveira, F. (2011). Redis Cookbook: Practical Techniques for
Fast Data Manipulation. O’Reilly Media, Inc.
Nelson, J. (2016). Mastering Redis. Packt Publishing Ltd.
Redis. Ddocumentation. https://redis.io/documentation.
83
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
Capítulo IV
Persistencia, replicación y particionamiento
1. Introducción
2. Persistencia
85
© Editorial UOC Introducción a las bases de datos NoSQL
86
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
Directiva Significado
stop-writes-on- Puede tomar el valor yes o no. Si toma el valor yes indica que
bgsave-error el sistema debe parar de aceptar escrituras si el último proceso
de creación falló. El sistema acepta escrituras si el proceso de
creación termina con éxito.
87
© Editorial UOC Introducción a las bases de datos NoSQL
88
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
Directiva Significado
89
© Editorial UOC Introducción a las bases de datos NoSQL
Algunas observaciones:
2.3. Replicación
90
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
91
© Editorial UOC Introducción a las bases de datos NoSQL
92
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
93
© Editorial UOC Introducción a las bases de datos NoSQL
2.4. Particionamiento
94
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
95
© Editorial UOC Introducción a las bases de datos NoSQL
96
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
1 https://redis.io/topics/lru-cache.
97
© Editorial UOC Introducción a las bases de datos NoSQL
98
© Editorial UOC Capítulo IV. Persistencia, replicación y particionamiento
Bibliografía
Carlson, J. L. (2013). Redis in action. Manning Publications Co.
Da Silva, M. D.; Tavares, H. L. (2015). Redis Essentials. Packt Publishing
Ltd.
Das, V. (2015). Learning Redis. Packt Publishing Ltd.
Nelson, J. (2016). Mastering Redis. Packt Publishing Ltd.
Redis. Documentation. https://redis.io/documentation
99
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
Capítulo V
Otros aspectos del uso de Redis
1. Introducción
2. El sistema publicador/suscrito
101
© Editorial UOC Introducción a las bases de datos NoSQL
102
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
PSUBSCRIBE noticias.*
103
© Editorial UOC Introducción a las bases de datos NoSQL
PUNSUBSCRIBE noticias.*
SUBSCRIBE canal
PSUBSCRIBE c.*
104
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
Comando Significado
3. Transacciones
105
© Editorial UOC Introducción a las bases de datos NoSQL
Se observa que:
106
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
WATCH ejemplo
valor = GET ejemplo
valor = valor + 1
MULTI
SET ejemplo $valor
EXEC
107
© Editorial UOC Introducción a las bases de datos NoSQL
Comando Significado
WATCH clave Controla las claves dadas para determinar la ejecución del bloque
MULTI-EXEC.
Fuente: elaboración propia
108
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
109
© Editorial UOC Introducción a las bases de datos NoSQL
a) EVAL
En este programa, el primer argumento es un conjunto de
comandos que se ejecutarán en el contexto del servidor Redis,
el segundo es el número de argumentos, el tercero son los argu-
mentos que representan nombres de clave y, a continuación,
aparecen otros argumentos adicionales que no son nombres de
clave. Desde los comandos de Lua se puede acceder a los argu-
mentos utilizando la variable global KEYS de forma indexada
empezando desde 1, y al resto de argumentos que no son clave
mediante la variable global ARGV. Por ejemplo:
110
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
111
© Editorial UOC Introducción a las bases de datos NoSQL
112
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
b) EVALSHA
)XQFLRQD LJXDO TXH (9$/ SHUR HQ OXJDU GH WHQHU XQ script
como primer argumento, tiene el resumen SHA1 de un script, de
manera que:
• (MHFXWDUHOFRPDQGR6&5,37)/86+
• Reiniciar una instancia de Redis.
113
© Editorial UOC Introducción a las bases de datos NoSQL
• 6&5,37)/86+2EOLJDD5HGLVDYDFLDUHOFDFKpGHscripts.
• SCRIPT EXISTS sha1 sha2 … shaN. Dada una lista de resú-
menes de SHA1 como argumentos, este comando devuelve
una matriz de 1 o 0, donde 1 significa que SHA1 específico
se reconoce como un script ya presente en el caché de scripting,
mientras que 0 significa que no encontró un script con este
SHA1.
• SCRIPT LOAD script. Este comando registra el script especi-
ficado en el caché de script de Redis. El comando es útil para
asegurar que EVALSHA no fallará sin la necesidad de ejecutar
el script.
• SCRIPT KILL. Este comando interrumpe un script de larga
duración que alcanza el tiempo de ejecución máximo con-
figurado para los scripts. El comando SCRIPT KILL solo se
puede usar con scripts que no modificaron el conjunto de datos
durante su ejecución (ya que detener un script de solo lectura
no viola la atomicidad).
114
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
115
© Editorial UOC Introducción a las bases de datos NoSQL
• redis.LOG_DEBUG
• redis.LOG_VERBOSE
• redis.LOG_NOTICE
• redis.LOG_WARNING
Generará lo siguiente:
116
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
comando redis.confRXWLOL]DQGRHOFRPDQGR&21),**(7
&21),*6(7&XDQGRXQscript se ejecuta durante más tiempo
del especificado, ocurre lo siguiente:
117
© Editorial UOC Introducción a las bases de datos NoSQL
6. Operaciones de gestión
Comando Significado
18
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
119
© Editorial UOC Introducción a las bases de datos NoSQL
Comando Significado
120
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
Comando Significado
121
© Editorial UOC Introducción a las bases de datos NoSQL
12
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
123
© Editorial UOC Introducción a las bases de datos NoSQL
pipe=r.pipeline(transaction=False)
124
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
125
© Editorial UOC Introducción a las bases de datos NoSQL
while True:
mensaje= p.get_message( )
if mensaje:
# Hacer algo con el mensaje
126
© Editorial UOC Capítulo V. Otros aspectos del uso de Redis
Bibliografía
Carlson, J. L. (2013). Redis in action. Manning Publications Co.
Da Silva, M. D.; Tavares, H. L. (2015). Redis Essentials. Packt Publishing
Ltd.
Das, V. (2015). Learning Redis. Packt Publishing Ltd.
Macedo, T., & Oliveira, F. (2011). Redis Cookbook: Practical Techniques for
Fast Data Manipulation. O’Reilly Media, Inc.
Nelson, J. (2016). Mastering Redis. Packt Publishing Ltd.
Redis. Documentation. https://redis.io/documentation.
Redis-py. https://redis-py.readthedocs.io/en/latest/.
127
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
Capítulo VI
Ejemplo de uso de Redis
1. Introducción
2. Elementos de información
129
© Editorial UOC Introducción a las bases de datos NoSQL
2.1. Usuario
130
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
id = conex.incr(‘usuario:id:’)
#Se declara una canalización
pipeline = conex.pipeline(True)
#Se actualiza el hash que mantiene el mapeo entre
usuarios e ids.
pipeline.hset(‘usuarios:’,usuario, id)
#Se añade la información de usuario a una clave de tipo
HASH
pipeline.hmset(‘usuario:%s’%id, {
‘usuario’: usuario,
‘id’: id,
‘nombre’: nombre,
‘seguidores’: 0,
‘siguiendo’: 0,
‘posts’: 0,
‘registro’: time.time( ),
})
pipeline.execute( )
return id
Sobre los mensajes que publican los usuarios de una red social
como Twitter podría interesar almacenar la siguiente informa-
ción: el contenido del mensaje, el nombre e identificador del
131
© Editorial UOC Introducción a las bases de datos NoSQL
132
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
133
© Editorial UOC Introducción a las bases de datos N
oSQ
L
134
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
135
© Editorial UOC Introducción a las bases de datos NoSQL
136
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
137
© Editorial UOC Introducción a las bases de datos NoSQL
138
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
139
© Editorial UOC Introducción a las bases de datos NoSQL
140
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
141
© Editorial UOC Introducción a las bases de datos NoSQL
142
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
3. Conclusión
143
© Editorial UOC Introducción a las bases de datos N
oSQ
L
144
© Editorial UOC Capítulo VI. Ejemplo de uso de Redis
Bibliografía
Carlson, J. L. (2013). Redis in action. Manning Publications Co.
145
© Editorial UOC Conclusión
Conclusión
147
© Editorial UOC Introducción a las bases de datos NoSQL
148
TECNOLOGÍA
En este libro se ofrece una introducción a las bases de datos NoSQL utilizando
como elemento de ilustración Redis, una base de datos de tipo clave-valor.
Se estructura en dos partes. En la primera, se describen los conceptos
fundamentales de las bases de datos NoSQL, y en la segunda, se introduce Redis.
Se explica su instalación, el modelo y las estructuras de datos, aspectos sobre
replicación, particionamiento y tipos de persistencia, y algunos aspectos de
administración de Redis. En el último capítulo se describe un ejemplo
de aplicación real de este sistema.
Antonio Sarasa
Doctor en Informática por la Universidad
Complutense de Madrid, donde imparte
docencia. Sus áreas de investigación se
centran en la aplicación de las técnicas
de procesadores de lenguajes y compiladores
al desarrollo de aplicaciones.