SlideShare una empresa de Scribd logo
Servidor de estructuras de datos básicas (NoSQL)


                                          Antonio Ognio
                                            @gnrfan




Saturday, March 24, 12
•   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 distribuciones



Saturday, March 24, 12
•   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 VMware



Saturday, March 24, 12
Tipos de datos
                • Cadenas de texto
                • Listas
                • Conjuntos
                • Conjuntos ordenados
                • Hashes (Diccionarios)
                • Canales (Pub/Sub)
Saturday, March 24, 12
API




                         http://redis.io/commands
Saturday, March 24, 12
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) 1




Saturday, March 24, 12
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 Turing



Saturday, March 24, 12
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 compactado


Saturday, March 24, 12
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
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
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.net
Saturday, March 24, 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 datos



Saturday, March 24, 12
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
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-demo
Saturday, March 24, 12
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
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
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
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-YM
Saturday, March 24, 12
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 plazo
Saturday, March 24, 12

Más contenido relacionado

PDF
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
PPT
Intro to MySQL Master Slave Replication
PDF
How to upgrade like a boss to MySQL 8.0 - PLE19
PDF
SQL vs NoSQL, an experiment with MongoDB
PDF
Memcached Presentation
PDF
Under the Hood of a Shard-per-Core Database Architecture
PPT
Dremel: Interactive Analysis of Web-Scale Datasets
PPTX
History of MySQL
MySQL InnoDB Cluster - A complete High Availability solution for MySQL
Intro to MySQL Master Slave Replication
How to upgrade like a boss to MySQL 8.0 - PLE19
SQL vs NoSQL, an experiment with MongoDB
Memcached Presentation
Under the Hood of a Shard-per-Core Database Architecture
Dremel: Interactive Analysis of Web-Scale Datasets
History of MySQL

La actualidad más candente (20)

PDF
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
PPTX
NoSQL databases
PDF
MySQL Day Virtual: Best Practices Tips - Upgrading to MySQL 8.0
PDF
MySQL High Availability Solutions
PDF
MySQL Database Architectures - MySQL InnoDB ClusterSet 2021-11
PDF
DVC - Git-like Data Version Control for Machine Learning projects
PDF
MongoDB Database Replication
PDF
CephFS Update
PDF
Polyglot persistence @ netflix (CDE Meetup)
PDF
Faster, better, stronger: The new InnoDB
PPTX
Introduction to NoSQL
PDF
MySQL8.0 in COSCUP2017
PPT
Chap1 slides
PDF
Java design patterns
PPTX
Oracle RAC features on Exadata
PDF
Kafka to the Maxka - (Kafka Performance Tuning)
PPTX
Seamless replication and disaster recovery for Apache Hive Warehouse
ODP
WMS Performance Shootout 2010
PDF
Hadoop and Spark
PDF
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
NoSQL databases
MySQL Day Virtual: Best Practices Tips - Upgrading to MySQL 8.0
MySQL High Availability Solutions
MySQL Database Architectures - MySQL InnoDB ClusterSet 2021-11
DVC - Git-like Data Version Control for Machine Learning projects
MongoDB Database Replication
CephFS Update
Polyglot persistence @ netflix (CDE Meetup)
Faster, better, stronger: The new InnoDB
Introduction to NoSQL
MySQL8.0 in COSCUP2017
Chap1 slides
Java design patterns
Oracle RAC features on Exadata
Kafka to the Maxka - (Kafka Performance Tuning)
Seamless replication and disaster recovery for Apache Hive Warehouse
WMS Performance Shootout 2010
Hadoop and Spark
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Publicidad

Similar a Redis: servidor de estructuras de datos (20)

PDF
Taller Redis
PDF
Redis–symfony–barcelona–31 05-2012
KEY
Aplicaciones web altamente escalables con Redis
PDF
Integrando Redis en aplicaciones Symfony2
PDF
Bases de datos NoSQL - Huancayo - 2010
PPTX
Redis: no solo una caché
PPTX
Bd nosql clave valor
PDF
¿Me prestas unos ciclos? Hacia el supercomputador sigiloso
PPT
Redis Fundamentals
KEY
Redis, base de datos NoSQL clave-valor
PPTX
Parte 1 momento 3 inis
PDF
Construyendo Aplicaciones Web con PHP + LUA + REDIS
PDF
Curso gratuito de Redis
PDF
Python - Programación para machos
PDF
Getting Started with Redis
PDF
Redis no es solo una caché
PDF
Aprendiendo REDIS en 20 minutos
PDF
mini-taller de Base de Datos y PostgreSQL
PDF
Introducción a NoSQL con MongoDB
Taller Redis
Redis–symfony–barcelona–31 05-2012
Aplicaciones web altamente escalables con Redis
Integrando Redis en aplicaciones Symfony2
Bases de datos NoSQL - Huancayo - 2010
Redis: no solo una caché
Bd nosql clave valor
¿Me prestas unos ciclos? Hacia el supercomputador sigiloso
Redis Fundamentals
Redis, base de datos NoSQL clave-valor
Parte 1 momento 3 inis
Construyendo Aplicaciones Web con PHP + LUA + REDIS
Curso gratuito de Redis
Python - Programación para machos
Getting Started with Redis
Redis no es solo una caché
Aprendiendo REDIS en 20 minutos
mini-taller de Base de Datos y PostgreSQL
Introducción a NoSQL con MongoDB
Publicidad

Más de Antonio Ognio (15)

PDF
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
PDF
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
PDF
Organizando una Hackparty
PDF
Lean Startups
PDF
Lenguajes y frameworks para desarrollo web
PDF
Desarrollando con PHP en Windows
PDF
Gestor de paquetes YUM
PDF
Twixer (english)
PDF
PDF
Mejorando la seguridad del servicio SSH - Hardening
PDF
Mini-tutorial de git
PDF
¿Porqué Python? ...y Django
PDF
Ubuntu Server Edition 9.04 Jaunty Jackalope
PDF
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux
PDF
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
¿Cómo elegir el languaje y el framework de tu próxima aplicación web?
Organizando una Hackparty
Lean Startups
Lenguajes y frameworks para desarrollo web
Desarrollando con PHP en Windows
Gestor de paquetes YUM
Twixer (english)
Mejorando la seguridad del servicio SSH - Hardening
Mini-tutorial de git
¿Porqué Python? ...y Django
Ubuntu Server Edition 9.04 Jaunty Jackalope
Consejos y trucos de supervivencia para nuevos usuarios de GNU/Linux

Redis: servidor de estructuras de datos

  • 1. Servidor de estructuras de datos básicas (NoSQL) Antonio Ognio @gnrfan Saturday, March 24, 12
  • 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 distribuciones Saturday, March 24, 12
  • 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 VMware Saturday, March 24, 12
  • 4. Tipos de datos • Cadenas de texto • Listas • Conjuntos • Conjuntos ordenados • Hashes (Diccionarios) • Canales (Pub/Sub) Saturday, March 24, 12
  • 5. API http://redis.io/commands Saturday, March 24, 12
  • 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) 1 Saturday, March 24, 12
  • 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 Turing Saturday, March 24, 12
  • 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 compactado Saturday, March 24, 12
  • 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. 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. 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.net Saturday, March 24, 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 datos Saturday, March 24, 12
  • 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. 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-demo Saturday, March 24, 12
  • 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. 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. 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. 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-YM Saturday, March 24, 12
  • 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 plazo Saturday, March 24, 12