SlideShare uma empresa Scribd logo
1 de 39
Redis, base de datos
  NoSQL clave-valor
@gimenete

         10 noviembre 2011
  Libre software world conference
Qué es Redis

• Base de datos clave-valor
• Soporta tipos de datos ¡y
  transacciones!

• Muuuuuuuuuuy rápida. ~100k ops/s
• Esponsorizada por VMWare
NoSQL buzzzzzzz
¿RDBMS suficiente?

• 640K - of memory - ought to be
  enough for anybody - Bill Gates?


• Who the hell knew how much address
  space we needed? - Vint Cerf
¿Hasta cuánto
   necesitaré escalar?
• ¿Cuántos usuarios tienes? ¿Cuál es tu
  máximo de usuarios? Tu país, todos
  los smartphones del mundo, el mundo
  entero,...?

• ¿Cuántas peticiones/s hace cada
  usuario de media?

• Elasticidad: ¿tienes picos?
Ejemplos de apps que
    necesitan escalar

• Juegos. Especialmente multijugador
• Aplicaciones sociales. Ej: Facebook
  apps

• Web services. Ej: pasarelas de pago.
• ¿Tú? Depende, claro
Escalar es...

• Escalar es poder atender más
  peticiones/s

• Se consigue
 • Con software más óptimo. ¡Ahorro
    de costes! Ej: http://bit.ly/ibdi20
 • Con hardware verticalmente u
    horizontalmente
RDMBS to the limit
SQL ¿rápido?

                 5.Acceder a los
1.Parsear SQL
                   datos
2.Planificar
                 6.Álgebra
  consulta
                   relacional
3.Optimizar
                 7.Cerrar tablas
  consulta
                 8.Devolver
4.Abrir tablas
                   resultado
SQL ¿rápido?


• Muchos pasos
• Difícil de optimizar
• Perdemos control
• Difícil de escalar
Ejemplo:
menéame.net
Join, join, join, join
Join, join, join, join
SELECT link_id AS id, link_author AS author, link_blog AS blog, /* muc
! FROM links
! INNER JOIN users ON (user_id = link_author)
! LEFT JOIN (categories AS cat, categories AS meta) ON (cat.category_i
! LEFT JOIN votes ON (link_date > @enabled_votes AND vote_type='links'
! LEFT JOIN favorites ON (@user_id > 0 AND favorite_user_id =  @user_i
! LEFT JOIN link_clicks AS clicks ON (clicks.id = links.link_id)
! INNER JOIN (SELECT link_id FROM links $from WHERE $where $order_by L



               Fuente: http://bit.ly/fLf0MK
Meneame.net

Creo que sería muy complicado encontrar una
consulta más eficiente que la anterior para la
base de datos del Menéame. Pero no ha sido
una idea que se me ocurrió de un día para
otro, ni siquiera en semanas. Fue la evolución
y el resultado de 5 años de experiencia
directa, a veces dolorosa, y de aprender
muchas cosas en el proceso.

- Ricardo Galli
Back to basics
Clave ➔ valor

•DNI      ➔ persona
•Matrícula ➔ vehículo
•Puntero ➔ dato
•PK       ➔ fila
get / set

redis > set foo bar
OK
redis > get foo
“bar”
incr

redis > incr usuarios
(integer) 1
redis > get usuarios
“1”
Ventajas
•Fácil de escalar, como veremos
•Rendimiento predecible. Sólo
 operaciones eficientes:
 optimizado por defecto
•Operaciones atómicas
¿Cómo escalar?



• Escalar lecturas: replicación
• Escalar escrituras: particionamiento
Particionamiento

• Los datos están en varios nodos
• A partir de la clave sabemos el nodo
  donde está el dato

• Particionamiento manual. Ej: claves
  con fechas

• Ejemplo particionamiento
  “autoámtico”:

  • nodo = hash(clave) % nodos
Particionamiento

• nodo = hash(clave) % nodos
• Problema: resharding. Al añadir o
  quitar nodos ¡hay que mover casi
  todos los datos!
• Solución: consistent hashing
Para no hacerlo
        nosotros...


• redis-cluster (en desarrollo)
• redis-sharding. Sustituto temporal
  hasta que redis-cluster esté listo.
Datos estructurados
¿get/set/incr suficiente?

• Objetos:
  • claves “usuario:1”, “usuario:2”,...
  • valores: serialización, json, xml,...
• ¿Consultas?
  • Listas que guardan ids, también
    serializados.
Pero Redis nos lo hace
       más fácil

• Soporta datos estructurados:
 • Hashes
 • Listas
 • Sets y sets ordenados
Hashes
redis > hset usuario:1 nombre Antonio
(integer) 1

redis > hset usuario:1 apellido Gonzalo
(integer) 1

redis > hgetall usuario:1
1. “nombre”
2. “Antonio”
3. “apellido”
4. “Gonzalo”
Hashes

  redis > hincrby usuario:1 followers
  (integer) 1


• Nos ahorramos leer-calcular-modificar
• Siguen siendo operaciones atómicas
Listas
redis > lpush mensajes mundo
(integer) 1
redis > lpush mensajes hola
redis > lrange mensajes 0 -1
1. “hola”
2. “mundo”
Sets y sets ordenados
redis > zincrby superheroes 1 batman
“1”
redis > zincrby superheroes 10 kickass
“10”
redis > zincrby superheroes 3 spiderman
“3”
redis > zrevrange superheroes 0 -1 withscores
1. “kickass”
2. “10”
3. “spiderman”
4. “3”
5. “batman”
6. “1”
Modelado de datos

• Objetos ➔ hashes
• Consultas ➔ listas, sets y sets
  ordenados

  • Guardar sólo el id
  • Son índices manuales
Consultas

• Consultamos el índice y hacemos JOIN
  en la aplicación

• Consultas complejas con UNIONES e
  INTERSECCIONES

• Paginaciones con LIMIT y OFFSET
• Borrado en cascada? Lecturas
  destructivas
Transacciones

• MULTI. Inicia transacción
• EXEC. Ejecuta transacción
• DISCARD. Cancela transacción
• WATCH / UNWATCH. Bloquea /
  desbloquea valores de ser modificados
  durante la transacción.
PUB / SUB
PUB / SUB
redis > subscribe canal1
Reading messages... (press Ctrl-c to quit)
1. “subscribe”
2. “canal1”
3. (integer) 1
---------------
redis > publish canal1 Hola
(integer) 1
---------------
1. “message”
2. “canal1”
3. “Hola”
Próximamente en Redis

• Scripting con LUA en la 2.6. Algo así
  como procedimientos almacenados
• Redis-cluster en la 3.0
• Y más: http://antirez.com/post/short-
  term-redis-plans.html
Cuándo usar Redis
• Como caché. Un memcache con datos
  estructurados y ¡persistente!. También
  soporta expiración.

• Como base de datos auxiliar cuando se
  necesite mucha velocidad.

• Como base de datos principal.
¿Algún inconveniente?

• Funciona con los datos en memoria
• ¡Pero es persistente!
  • Snapshots o Append-only-file
• Y soporta replicación
• VM y diskstore fueron “deprecated”
¿Preguntas?


Thanks for attending!

    @gimenete
   http://redis.io

Mais conteúdo relacionado

Mais procurados

Cuestionario
CuestionarioCuestionario
Cuestionario
jpauly4
 
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDASUNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
Eduardo S de Loera
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datos
josecuartas
 

Mais procurados (20)

Diseno
DisenoDiseno
Diseno
 
Efficient Pagination Using MySQL
Efficient Pagination Using MySQLEfficient Pagination Using MySQL
Efficient Pagination Using MySQL
 
Oracle RAC sin sorpresas - v2014
Oracle RAC sin sorpresas - v2014Oracle RAC sin sorpresas - v2014
Oracle RAC sin sorpresas - v2014
 
DISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDASDISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDAS
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Diccionario de Datos
Diccionario de DatosDiccionario de Datos
Diccionario de Datos
 
Capitulo 6 prototipos
Capitulo 6 prototiposCapitulo 6 prototipos
Capitulo 6 prototipos
 
Sq lite presentation
Sq lite presentationSq lite presentation
Sq lite presentation
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Integridad de base de datos
Integridad de base de datosIntegridad de base de datos
Integridad de base de datos
 
InnoDB Locking Explained with Stick Figures
InnoDB Locking Explained with Stick FiguresInnoDB Locking Explained with Stick Figures
InnoDB Locking Explained with Stick Figures
 
Claselexico
ClaselexicoClaselexico
Claselexico
 
CQRS in 4 steps
CQRS in 4 stepsCQRS in 4 steps
CQRS in 4 steps
 
Bases de datos orientadas a grafos
Bases de datos orientadas a grafosBases de datos orientadas a grafos
Bases de datos orientadas a grafos
 
Design pattern talk by Kaya Weers - 2024
Design pattern talk by Kaya Weers - 2024Design pattern talk by Kaya Weers - 2024
Design pattern talk by Kaya Weers - 2024
 
Blockchain meets database
Blockchain meets databaseBlockchain meets database
Blockchain meets database
 
MongoDB Sharding Fundamentals
MongoDB Sharding Fundamentals MongoDB Sharding Fundamentals
MongoDB Sharding Fundamentals
 
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDASUNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
UNIDAD 2 DISEÑO DE LAS BASES DE DATOS DISTRIBUIDAS
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datos
 

Destaque

Taller Redis
Taller RedisTaller Redis
Taller Redis
betabeers
 
Saludos en español a
Saludos en español aSaludos en español a
Saludos en español a
salpadilla
 

Destaque (20)

Aprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutosAprendiendo REDIS en 20 minutos
Aprendiendo REDIS en 20 minutos
 
Redis: servidor de estructuras de datos
Redis: servidor de estructuras de datosRedis: servidor de estructuras de datos
Redis: servidor de estructuras de datos
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
NoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesNoSQL bases de datos no relacionales
NoSQL bases de datos no relacionales
 
Taller Redis
Taller RedisTaller Redis
Taller Redis
 
Bases de datos NoSQL orientadas a documentos
Bases de datos NoSQL orientadas a documentosBases de datos NoSQL orientadas a documentos
Bases de datos NoSQL orientadas a documentos
 
Bases de datos documentales
Bases de datos documentalesBases de datos documentales
Bases de datos documentales
 
Resume of Lenin Babu
Resume of Lenin BabuResume of Lenin Babu
Resume of Lenin Babu
 
Delivering Excellent Support Customer Experiences in Marketing
Delivering Excellent Support Customer Experiences in MarketingDelivering Excellent Support Customer Experiences in Marketing
Delivering Excellent Support Customer Experiences in Marketing
 
CAP and BASE
CAP and BASECAP and BASE
CAP and BASE
 
Circuitos Digitales - Corrimiento de bits
Circuitos Digitales - Corrimiento de bits Circuitos Digitales - Corrimiento de bits
Circuitos Digitales - Corrimiento de bits
 
DevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at AcquiaDevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at Acquia
 
Etl tool
Etl toolEtl tool
Etl tool
 
Saludos en español a
Saludos en español aSaludos en español a
Saludos en español a
 
Introdução às Metodologias Ágeis de Desenvolvimento
Introdução às Metodologias Ágeis de DesenvolvimentoIntrodução às Metodologias Ágeis de Desenvolvimento
Introdução às Metodologias Ágeis de Desenvolvimento
 
06 regression
06 regression06 regression
06 regression
 
Decimales: Valor Posicional
Decimales: Valor PosicionalDecimales: Valor Posicional
Decimales: Valor Posicional
 
sukanya HR Resume updated
sukanya HR Resume updatedsukanya HR Resume updated
sukanya HR Resume updated
 
Romanos 10 palavra
Romanos 10   palavraRomanos 10   palavra
Romanos 10 palavra
 
Objective runtime
Objective runtimeObjective runtime
Objective runtime
 

Semelhante a Redis, base de datos NoSQL clave-valor

Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
Alberto Gimeno
 
Primeros pasos con Neo4j
Primeros pasos con Neo4jPrimeros pasos con Neo4j
Primeros pasos con Neo4j
Ubaldo Taladriz
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Juan Percy Rojas Cruz
 

Semelhante a Redis, base de datos NoSQL clave-valor (20)

Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
El futuro de Big Data: La calidad del análisis. Modelos efectivos y casos de uso
El futuro de Big Data: La calidad del análisis. Modelos efectivos y casos de usoEl futuro de Big Data: La calidad del análisis. Modelos efectivos y casos de uso
El futuro de Big Data: La calidad del análisis. Modelos efectivos y casos de uso
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Polybase
PolybasePolybase
Polybase
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
 
Pon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redisPon tus aplicaciones a 100 con redis
Pon tus aplicaciones a 100 con redis
 
Desayuno de arquitectos: Big data en azure
Desayuno de arquitectos: Big data en azureDesayuno de arquitectos: Big data en azure
Desayuno de arquitectos: Big data en azure
 
Social Erlang
Social ErlangSocial Erlang
Social Erlang
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4j
 
Actividad de aprendizaje 4
Actividad de aprendizaje 4Actividad de aprendizaje 4
Actividad de aprendizaje 4
 
Carbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshareCarbura tusql sesion1_slideshare
Carbura tusql sesion1_slideshare
 
Primeros pasos con Neo4j
Primeros pasos con Neo4jPrimeros pasos con Neo4j
Primeros pasos con Neo4j
 
Big Data en Azure: Azure Data Lake
Big Data en Azure: Azure Data LakeBig Data en Azure: Azure Data Lake
Big Data en Azure: Azure Data Lake
 
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQLGestores de Base de Datos en Linux:  Un vistazo a MySQL y PostgreSQL
Gestores de Base de Datos en Linux: Un vistazo a MySQL y PostgreSQL
 
Monta una Infraestructura para Big Data en tu Empresa
Monta una Infraestructura para Big Data en tu EmpresaMonta una Infraestructura para Big Data en tu Empresa
Monta una Infraestructura para Big Data en tu Empresa
 
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de Datos Empresariales (EDW) y Windows Azure (SQL Databas...
 
Desarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.netDesarrollo Full Stack UAM.net
Desarrollo Full Stack UAM.net
 
Base de datos
Base de datos Base de datos
Base de datos
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (11)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Redis, base de datos NoSQL clave-valor

  • 1. Redis, base de datos NoSQL clave-valor @gimenete 10 noviembre 2011 Libre software world conference
  • 2. Qué es Redis • Base de datos clave-valor • Soporta tipos de datos ¡y transacciones! • Muuuuuuuuuuy rápida. ~100k ops/s • Esponsorizada por VMWare
  • 4. ¿RDBMS suficiente? • 640K - of memory - ought to be enough for anybody - Bill Gates? • Who the hell knew how much address space we needed? - Vint Cerf
  • 5. ¿Hasta cuánto necesitaré escalar? • ¿Cuántos usuarios tienes? ¿Cuál es tu máximo de usuarios? Tu país, todos los smartphones del mundo, el mundo entero,...? • ¿Cuántas peticiones/s hace cada usuario de media? • Elasticidad: ¿tienes picos?
  • 6. Ejemplos de apps que necesitan escalar • Juegos. Especialmente multijugador • Aplicaciones sociales. Ej: Facebook apps • Web services. Ej: pasarelas de pago. • ¿Tú? Depende, claro
  • 7. Escalar es... • Escalar es poder atender más peticiones/s • Se consigue • Con software más óptimo. ¡Ahorro de costes! Ej: http://bit.ly/ibdi20 • Con hardware verticalmente u horizontalmente
  • 8. RDMBS to the limit
  • 9. SQL ¿rápido? 5.Acceder a los 1.Parsear SQL datos 2.Planificar 6.Álgebra consulta relacional 3.Optimizar 7.Cerrar tablas consulta 8.Devolver 4.Abrir tablas resultado
  • 10. SQL ¿rápido? • Muchos pasos • Difícil de optimizar • Perdemos control • Difícil de escalar
  • 13. Join, join, join, join SELECT link_id AS id, link_author AS author, link_blog AS blog, /* muc ! FROM links ! INNER JOIN users ON (user_id = link_author) ! LEFT JOIN (categories AS cat, categories AS meta) ON (cat.category_i ! LEFT JOIN votes ON (link_date > @enabled_votes AND vote_type='links' ! LEFT JOIN favorites ON (@user_id > 0 AND favorite_user_id =  @user_i ! LEFT JOIN link_clicks AS clicks ON (clicks.id = links.link_id) ! INNER JOIN (SELECT link_id FROM links $from WHERE $where $order_by L Fuente: http://bit.ly/fLf0MK
  • 14. Meneame.net Creo que sería muy complicado encontrar una consulta más eficiente que la anterior para la base de datos del Menéame. Pero no ha sido una idea que se me ocurrió de un día para otro, ni siquiera en semanas. Fue la evolución y el resultado de 5 años de experiencia directa, a veces dolorosa, y de aprender muchas cosas en el proceso. - Ricardo Galli
  • 16. Clave ➔ valor •DNI ➔ persona •Matrícula ➔ vehículo •Puntero ➔ dato •PK ➔ fila
  • 17. get / set redis > set foo bar OK redis > get foo “bar”
  • 18. incr redis > incr usuarios (integer) 1 redis > get usuarios “1”
  • 19. Ventajas •Fácil de escalar, como veremos •Rendimiento predecible. Sólo operaciones eficientes: optimizado por defecto •Operaciones atómicas
  • 20. ¿Cómo escalar? • Escalar lecturas: replicación • Escalar escrituras: particionamiento
  • 21. Particionamiento • Los datos están en varios nodos • A partir de la clave sabemos el nodo donde está el dato • Particionamiento manual. Ej: claves con fechas • Ejemplo particionamiento “autoámtico”: • nodo = hash(clave) % nodos
  • 22. Particionamiento • nodo = hash(clave) % nodos • Problema: resharding. Al añadir o quitar nodos ¡hay que mover casi todos los datos! • Solución: consistent hashing
  • 23. Para no hacerlo nosotros... • redis-cluster (en desarrollo) • redis-sharding. Sustituto temporal hasta que redis-cluster esté listo.
  • 25. ¿get/set/incr suficiente? • Objetos: • claves “usuario:1”, “usuario:2”,... • valores: serialización, json, xml,... • ¿Consultas? • Listas que guardan ids, también serializados.
  • 26. Pero Redis nos lo hace más fácil • Soporta datos estructurados: • Hashes • Listas • Sets y sets ordenados
  • 27. Hashes redis > hset usuario:1 nombre Antonio (integer) 1 redis > hset usuario:1 apellido Gonzalo (integer) 1 redis > hgetall usuario:1 1. “nombre” 2. “Antonio” 3. “apellido” 4. “Gonzalo”
  • 28. Hashes redis > hincrby usuario:1 followers (integer) 1 • Nos ahorramos leer-calcular-modificar • Siguen siendo operaciones atómicas
  • 29. Listas redis > lpush mensajes mundo (integer) 1 redis > lpush mensajes hola redis > lrange mensajes 0 -1 1. “hola” 2. “mundo”
  • 30. Sets y sets ordenados redis > zincrby superheroes 1 batman “1” redis > zincrby superheroes 10 kickass “10” redis > zincrby superheroes 3 spiderman “3” redis > zrevrange superheroes 0 -1 withscores 1. “kickass” 2. “10” 3. “spiderman” 4. “3” 5. “batman” 6. “1”
  • 31. Modelado de datos • Objetos ➔ hashes • Consultas ➔ listas, sets y sets ordenados • Guardar sólo el id • Son índices manuales
  • 32. Consultas • Consultamos el índice y hacemos JOIN en la aplicación • Consultas complejas con UNIONES e INTERSECCIONES • Paginaciones con LIMIT y OFFSET • Borrado en cascada? Lecturas destructivas
  • 33. Transacciones • MULTI. Inicia transacción • EXEC. Ejecuta transacción • DISCARD. Cancela transacción • WATCH / UNWATCH. Bloquea / desbloquea valores de ser modificados durante la transacción.
  • 35. PUB / SUB redis > subscribe canal1 Reading messages... (press Ctrl-c to quit) 1. “subscribe” 2. “canal1” 3. (integer) 1 --------------- redis > publish canal1 Hola (integer) 1 --------------- 1. “message” 2. “canal1” 3. “Hola”
  • 36. Próximamente en Redis • Scripting con LUA en la 2.6. Algo así como procedimientos almacenados • Redis-cluster en la 3.0 • Y más: http://antirez.com/post/short- term-redis-plans.html
  • 37. Cuándo usar Redis • Como caché. Un memcache con datos estructurados y ¡persistente!. También soporta expiración. • Como base de datos auxiliar cuando se necesite mucha velocidad. • Como base de datos principal.
  • 38. ¿Algún inconveniente? • Funciona con los datos en memoria • ¡Pero es persistente! • Snapshots o Append-only-file • Y soporta replicación • VM y diskstore fueron “deprecated”
  • 39. ¿Preguntas? Thanks for attending! @gimenete http://redis.io

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n