Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Servidor de estructuras de datos básicas (NoSQL)                                          Antonio Ognio                   ...
•   ReDIS = Remote Dictionary Server                     •   Diccionario ~= Array de PHP, Objeto Javascript, etc          ...
•   Creado en Sicilia (Italia) por Salvatore Sanfilippo                     •   Iniciado a principios del 2009             ...
Tipos de datos                • Cadenas de texto                • Listas                • Conjuntos                • Conju...
API                         http://redis.io/commandsSaturday, March 24, 12
API            $ redis-cli   zadd hackers 1940 "Alan Kay"            (integer) 1            $ redis-cli   zadd hackers 195...
API             $ redis-cli zrange hackers 0 -1             1. Alan Turing             2. Claude Shannon             3. Al...
Persistencia                • El conjunto de datos debe entrar en la RAM                • Snapshots en disco cada cierto t...
Librerías cliente                • Existentes para virtualmente cualquier                         lenguaje popular de la a...
Clustering                •        Por el momento soporta                         replicación master-slave                ...
Comunidad                •        Early-adopters en las comunidades de Ruby y Python                         principalment...
Comparativa                   • MySQL (o cualquier otra base SQL)                         •   El almacenamiento principal ...
Comparativa                   • Memcached                         •   Muy popular en sitios web grandes                   ...
Modelamiento                   • ¿Cómo modelamos un blog?                         •   ID de post (un contador)            ...
Código de ejemplo                   • Lamer News (un clone de Reddit)                         •   Escrito por Salvatore, e...
Ideas de uso                         •   Contadores rápidos para sitios web                         •   Colas de trabajos ...
Estrategias de despliegue                         •   YouPorn, uno de los sitios con más tráfico de Internet depende       ...
Ej. Modelamiento YouPorn                                 videos:filters:released                           videos:filters:...
Conclusiones               •         Servidor de estructuras de datos básicas en red                         (listas, conj...
Upcoming SlideShare
Loading in …5
×

Redis: servidor de estructuras de datos

5,650 views

Published on

Una introducción a Redis, un servidor de estructuras de datos en red que actua como una base de datos no-relacional con almacenamiento principal en memoria RAM y estrategias de almacenamiento persistente basadas en disco.

Redis: servidor de estructuras de datos

  1. 1. Servidor de estructuras de datos básicas (NoSQL) Antonio Ognio @gnrfanSaturday, March 24, 12
  2. 2. • ReDIS = Remote Dictionary Server • Diccionario ~= Array de PHP, Objeto Javascript, etc • Servidor de sockets TCP/IP (Puerto 6379 - Prot. texto plano) • Escrito en C (23+ Kloc) • Fácil compilación e instalación (pocas dependencias) • Programado para entornos UNIX (Linux, BSD, Mac OS X) • Empaquetado para mayoría de distribucionesSaturday, March 24, 12
  3. 3. • Creado en Sicilia (Italia) por Salvatore Sanfilippo • Iniciado a principios del 2009 • Licencia BSD (Código abierto) • Desarrollado inicialmente para LLOOGG • Co-desarrollado por Pieter Noordhuis (Holanda) • Sponsoring de VMwareSaturday, March 24, 12
  4. 4. Tipos de datos • Cadenas de texto • Listas • Conjuntos • Conjuntos ordenados • Hashes (Diccionarios) • Canales (Pub/Sub)Saturday, March 24, 12
  5. 5. API http://redis.io/commandsSaturday, March 24, 12
  6. 6. API $ redis-cli zadd hackers 1940 "Alan Kay" (integer) 1 $ redis-cli zadd hackers 1953 "Richard Stallman" (integer) 1 $ redis-cli zadd hackers 1965 "Yukihiro Matsumoto" (integer) 1 $ redis-cli zadd hackers 1916 "Claude Shannon" (integer) 1 $ redis-cli zadd hackers 1969 "Linus Torvalds" (integer) 1 $ redis-cli zadd hackers 1912 "Alan Turing" (integer) 1Saturday, March 24, 12
  7. 7. API $ redis-cli zrange hackers 0 -1 1. Alan Turing 2. Claude Shannon 3. Alan Kay 4. Richard Stallman 5. Yukihiro Matsumoto 6. Linus Torvalds $ redis-cli zrevrange hackers 0 -1 1. Linus Torvalds 2. Yukihiro Matsumoto 3. Richard Stallman 4. Alan Kay 5. Claude Shannon 6. Alan TuringSaturday, March 24, 12
  8. 8. Persistencia • El conjunto de datos debe entrar en la RAM • Snapshots en disco cada cierto tiempo • Ventana de tiempo configurable • Compacto (en uso de disco) • Append-only file (AOF) • Registra cada cambio en tiempo real • Usa más espacio de disco pero puede ser compactadoSaturday, March 24, 12
  9. 9. Librerías cliente • Existentes para virtualmente cualquier lenguaje popular de la actualidad • En muchos casos más de una librería disponible • Algunas de ellas: http://redis.io/clients • redis-py (Python) • hiredis (C) • redis-rb (Ruby) • ObjCHiredis (Objective-C) • Jedis (Java) • redis_node (Node.js)Saturday, March 24, 12
  10. 10. Clustering • Por el momento soporta replicación master-slave • Librerías cliente implementan sharding • Algoritmo de consistent hashing • Redis Cluster • Rama de Redis en desarrollo activo • Se basa en el concepto de “slots” o “virtual buckets”Saturday, March 24, 12
  11. 11. Comunidad • Early-adopters en las comunidades de Ruby y Python principalmente • Muy popular con las startups • Meetup groups (San Francisco, Londres) • Seguir a @antirez en Twitter y buscar el hashtag #redis • Canal IRC muy activo y amigable: #redis en Freenode.netSaturday, March 24, 12
  12. 12. Comparativa • MySQL (o cualquier otra base SQL) • El almacenamiento principal es en disco, la RAM se usa como caché - Redis toma el camino opuesto • El parsing de SQL es un cuello de botella • Por eso les conviene usar Prepared Statements • El modelo relacional y el lenguaje SQL es mucho más flexible si no se conoce de antemano el uso que se le va a dar a los datosSaturday, March 24, 12
  13. 13. Comparativa • Memcached • Muy popular en sitios web grandes • No soporta persistencia directamente • Existe memcachedb como un proyecto aparte • Solo permite almacenar cadenas o BLOBs • Estrategia de expiración basada en tiempo (TTL) • No soporta clustering directamente • Las librerías deben implementar una estrategia como round robin o consistent hashing.Saturday, March 24, 12
  14. 14. Modelamiento • ¿Cómo modelamos un blog? • ID de post (un contador) • Datos de cada post (un hash) • Tags de cada post (un conjunto) • Listado de posts ordenados por fecha (un sorted set) • Posts por meses, posts por tags, etc (más sorted sets) https://bitbucket.org/nosqldemos/redis-blog-demoSaturday, March 24, 12
  15. 15. Código de ejemplo • Lamer News (un clone de Reddit) • Escrito por Salvatore, el autor de Redis • Código bastante simple usando Sinatra (Ruby) • Demuestra el uso de Redis como base de datos principal • Hay un port en Python en Github http://lamernews.com/Saturday, March 24, 12
  16. 16. Ideas de uso • Contadores rápidos para sitios web • Colas de trabajos (Ej. Resque de Github) • Lista de últimos usuarios que han visitado un portal • Caché de objetos más visitados (Ej. Noticias de la portada) • Servidor de chat usando canales (pub/sub) http://rediscookbook.com/Saturday, March 24, 12
  17. 17. Estrategias de despliegue • YouPorn, uno de los sitios con más tráfico de Internet depende de Redis para indexar y servir su contenido • Uso extensivo de Sorted Sets para cada tag o listado de videos independiente • Decenas de servidores Redis en replicación master- • Redis resultó más rápido que las tarjetas de red que tenían, tuvieron que cambiarlas • Aún se guardan los datos en MySQL para regenerar conjuntos http://mundogeek.net/archivos/2012/02/16/el-porno-prefiere-redis/Saturday, March 24, 12
  18. 18. Ej. Modelamiento YouPorn videos:filters:released videos:filters:orientation:​straight videos:filters:categories:{​category_id} videos:ordering:rating https://groups.google.com/forum/#!topic/redis-db/d4QcWV0p-YMSaturday, March 24, 12
  19. 19. Conclusiones • Servidor de estructuras de datos básicas en red (listas, conjuntos, diccionarios, contadores) • Aplicable virtualmente a cualquier sitio web ya existente como parte de una estrategia de caché o acelaración • Exige un tipo de modelamiento orientado al dominio del problema que ofrece un alto rendimiento a la hora de hacer consultas pero no es flexible como estrategia de almacenamiento a largo plazoSaturday, March 24, 12

×