Remote Dictionary Server                        Maxwell Dayvson - @dayvson                       maxwell.silva@corp.terra....
Premissas NoSQL • Não podem exigir esquemas de tabela fixa; • Não suportam instruções e operações de junção SQL. • Pensar f...
Quais os tipos de NoSQL?Friday, July 1, 2011
Quais os tipos de NoSQL? Chave/Valor           Colunas • Amazon Dynamo       • Cassandra • Membase             • BigTable ...
Documento  São baseados em documentos XML ou JSON,  podem ser buscados por uma chave única ou por  qualquer outro valor co...
Colunas Inspirados pelo BigTable do Google. Suportam um grande número de colunas e linhas, permitindo buscas pelas colunas...
Grafo   São os mais complexos devido ao fato de que os   documentos não são armazenados em listas,   mas em objetos.Friday...
Chave/Valor O tipo mais simples. Armazenam apenas “uma chave e um respectivo valor”.Friday, July 1, 2011
REDISFriday, July 1, 2011
Porque REDIS?Friday, July 1, 2011
Porque REDIS? * Incrivelmente rápidoFriday, July 1, 2011
Porque REDIS? * Incrivelmente rápido * I/O não bloqueanteFriday, July 1, 2011
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo.Friday, July 1, 2011
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores po...
Que tipos de dados eu posso armazenar?Friday, July 1, 2011
Que tipos de dados eu posso armazenar?    * StringsFriday, July 1, 2011
Que tipos de dados eu posso armazenar?    * Strings    * IntegersFriday, July 1, 2011
Que tipos de dados eu posso armazenar?    * Strings    * Integers    * HashFriday, July 1, 2011
Que tipos de dados eu posso armazenar?    * Strings    * Integers    * Hash    * ListsFriday, July 1, 2011
Que tipos de dados eu posso armazenar?    * Strings    * Integers    * Hash    * Lists    * SetsFriday, July 1, 2011
Que tipos de dados eu posso armazenar?    * Strings    * Integers    * Hash    * Lists    * Sets    * Sorted SetsFriday, J...
Manifesto?Friday, July 1, 2011
Manifesto?            ..."Nos somos contra complexidade. Acreditamos que            desenvolver sistemas significa lutar co...
Clients para Redis:Friday, July 1, 2011
Clients para Redis:        *C              * Haskell      * PHP        * C#            * haXe         * Python        * C+...
Quem usa o REDIS?Friday, July 1, 2011
Quem usa o REDIS?Friday, July 1, 2011
Como eu posso enviar updates real time    (live) para 100.000, 500.000, 1.000.000    usuários conectados?Friday, July 1, 2...
Para mudanças rápidas                       podemos usar o REDISFriday, July 1, 2011
Friday, July 1, 2011
NO                       Procuramos a melhor ferramenta para                       resolver o problema da melhor forma.Fri...
Quando eu uso?Friday, July 1, 2011
Quando eu uso? * CacheFriday, July 1, 2011
Quando eu uso? * Cache * Stock PricesFriday, July 1, 2011
Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github)Friday, July 1, 2011
Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collectionFriday, July 1, 2011
Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Commun...
Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Commun...
Instalando... $ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz $ tar xzf redis-2.2.11.tar.gz $ cd redis-2.2.11 ...
Rodando os testes :) $ make testFriday, July 1, 2011
Start Redis Server $ ./redis-server Run client redis builtin $ ./redis-cli redis> set produto terratv redis> get produtoFr...
Mais algumas opções:    $ ./redis-cli -h 127.0.0.1 -p 6379    $ ./redis-cli -n 10    $ ./redis-cli set person dayvson    $...
Comandos básicos: SET [key value] GET [key] MGET [key1, key2, key3, key4] MSET [key1 value, key2 value, key3 value, key4 v...
Comandos com KEYS: DEL key EXIST key EXPIRE key seconds KEYS pattern MOVE key PERSIST key TYPE keyFriday, July 1, 2011
Comandos de servidor:    DBSIZE    MONITOR    INFO    SELECT    BGSAVE    SAVE    FLUSHALL    FLUSHDBFriday, July 1, 2011
PersistênciaFriday, July 1, 2011
Persistência? Por padrão o redis persiste os dados fazendo um dump assíncrono com o snapshot atual. * A cada X segundos se...
ReplicationFriday, July 1, 2011
Replication * Simples de configurar e usar * Um mestre pode ter vários slaves * Um slave aceita conexões de outros slaves *...
publish/subscribe  Quando precisamos avisar a outros que as coisas mudaramFriday, July 1, 2011
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners env...
O quanto é rápido? Redis possui uma ferramenta de benchmark $ ./redis-benchmark -q -n 100000Friday, July 1, 2011
Redis Monitor $ telnet 127.0.0.1 6379 monitor Redis Tools https://github.com/antirez/redis-tools Teste online http://try.r...
Cluster no Redis? * Na versão 3.0 suporte a cluster oficialmente.Friday, July 1, 2011
Perguntas?                             Maxwell Dayvson                           dayvson@gmail.com                       m...
Próximos SlideShares
Carregando em…5
×

FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL

4.125 visualizações

Publicada em

Na palestra do fisl fiz uma introdução aos tipos de banco de dados NOSQL e um e aprofundei no uso e vantagens do Redis na versão 2.2.11.

0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.125
No SlideShare
0
A partir de incorporações
0
Número de incorporações
37
Ações
Compartilhamentos
0
Downloads
67
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL

  1. 1. Remote Dictionary Server Maxwell Dayvson - @dayvson maxwell.silva@corp.terra.com.brFriday, July 1, 2011
  2. 2. Premissas NoSQL • Não podem exigir esquemas de tabela fixa; • Não suportam instruções e operações de junção SQL. • Pensar fora da caixa.Friday, July 1, 2011
  3. 3. Quais os tipos de NoSQL?Friday, July 1, 2011
  4. 4. Quais os tipos de NoSQL? Chave/Valor Colunas • Amazon Dynamo • Cassandra • Membase • BigTable • Redis • HBase • Scalaris • Hyperbase • Voldemort Documento Grafo • Amazon SimpleDb • Neo4j • Apache Couchdb • InfoGrid • MongoDb • Sones • Riak • HyperGraphDBFriday, July 1, 2011
  5. 5. Documento São baseados em documentos XML ou JSON, podem ser buscados por uma chave única ou por qualquer outro valor contido no documento.Friday, July 1, 2011
  6. 6. Colunas Inspirados pelo BigTable do Google. Suportam um grande número de colunas e linhas, permitindo buscas pelas colunas.Friday, July 1, 2011
  7. 7. Grafo São os mais complexos devido ao fato de que os documentos não são armazenados em listas, mas em objetos.Friday, July 1, 2011
  8. 8. Chave/Valor O tipo mais simples. Armazenam apenas “uma chave e um respectivo valor”.Friday, July 1, 2011
  9. 9. REDISFriday, July 1, 2011
  10. 10. Porque REDIS?Friday, July 1, 2011
  11. 11. Porque REDIS? * Incrivelmente rápidoFriday, July 1, 2011
  12. 12. Porque REDIS? * Incrivelmente rápido * I/O não bloqueanteFriday, July 1, 2011
  13. 13. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo.Friday, July 1, 2011
  14. 14. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não)Friday, July 1, 2011
  15. 15. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave ReplicationFriday, July 1, 2011
  16. 16. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/SubscribeFriday, July 1, 2011
  17. 17. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequenoFriday, July 1, 2011
  18. 18. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * TransactionsFriday, July 1, 2011
  19. 19. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D)Friday, July 1, 2011
  20. 20. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco.Friday, July 1, 2011
  21. 21. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco. * É OPEN SOURCE - BSD LicenseFriday, July 1, 2011
  22. 22. Porque REDIS? * Incrivelmente rápido * I/O não bloqueante * 100.000+ leitura/escrita por segundo. * As chaves e valores podem expirar (ou não) * Master Slave Replication * Publish/Subscribe * Leve e pequeno * Transactions * Similar ao MEMCACHED ( com anabolizantes :D) * Dados persistidos em memória/disco. * É OPEN SOURCE - BSD License * VMWare SponsorFriday, July 1, 2011
  23. 23. Que tipos de dados eu posso armazenar?Friday, July 1, 2011
  24. 24. Que tipos de dados eu posso armazenar? * StringsFriday, July 1, 2011
  25. 25. Que tipos de dados eu posso armazenar? * Strings * IntegersFriday, July 1, 2011
  26. 26. Que tipos de dados eu posso armazenar? * Strings * Integers * HashFriday, July 1, 2011
  27. 27. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * ListsFriday, July 1, 2011
  28. 28. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * SetsFriday, July 1, 2011
  29. 29. Que tipos de dados eu posso armazenar? * Strings * Integers * Hash * Lists * Sets * Sorted SetsFriday, July 1, 2011
  30. 30. Manifesto?Friday, July 1, 2011
  31. 31. Manifesto? ..."Nos somos contra complexidade. Acreditamos que desenvolver sistemas significa lutar contra complexidade. Nos aceitaremos lutar contra a complexidade quando necessário. Nos esforçaremos para reconhecer quando uma pequena funcionalidade não vale mais que 1000 linhas de código. Na maioria das vezes, a melhor forma de lutar contra a complexidade e não cria-lá"...Friday, July 1, 2011
  32. 32. Clients para Redis:Friday, July 1, 2011
  33. 33. Clients para Redis: *C * Haskell * PHP * C# * haXe * Python * C++ * Java * Ruby * Clojure * Lua * Scala * Common Lisp * Node.JS * SmallTalk * Erlang * Objetive C * Tcl * Go * PerlFriday, July 1, 2011
  34. 34. Quem usa o REDIS?Friday, July 1, 2011
  35. 35. Quem usa o REDIS?Friday, July 1, 2011
  36. 36. Como eu posso enviar updates real time (live) para 100.000, 500.000, 1.000.000 usuários conectados?Friday, July 1, 2011
  37. 37. Para mudanças rápidas podemos usar o REDISFriday, July 1, 2011
  38. 38. Friday, July 1, 2011
  39. 39. NO Procuramos a melhor ferramenta para resolver o problema da melhor forma.Friday, July 1, 2011
  40. 40. Quando eu uso?Friday, July 1, 2011
  41. 41. Quando eu uso? * CacheFriday, July 1, 2011
  42. 42. Quando eu uso? * Cache * Stock PricesFriday, July 1, 2011
  43. 43. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github)Friday, July 1, 2011
  44. 44. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collectionFriday, July 1, 2011
  45. 45. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time CommunicationFriday, July 1, 2011
  46. 46. Quando eu uso? * Cache * Stock Prices * Sharding Directory Service (github) * Real Time data collection * Real Time Communication * AnalyticsFriday, July 1, 2011
  47. 47. Instalando... $ wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz $ tar xzf redis-2.2.11.tar.gz $ cd redis-2.2.11 $ makeFriday, July 1, 2011
  48. 48. Rodando os testes :) $ make testFriday, July 1, 2011
  49. 49. Start Redis Server $ ./redis-server Run client redis builtin $ ./redis-cli redis> set produto terratv redis> get produtoFriday, July 1, 2011
  50. 50. Mais algumas opções: $ ./redis-cli -h 127.0.0.1 -p 6379 $ ./redis-cli -n 10 $ ./redis-cli set person dayvson $ ./redis-cli get personFriday, July 1, 2011
  51. 51. Comandos básicos: SET [key value] GET [key] MGET [key1, key2, key3, key4] MSET [key1 value, key2 value, key3 value, key4 value] TYPE KEY INCR KEY DECR KEY APPEND KEY VALUE SUBSTR KEY 0 1Friday, July 1, 2011
  52. 52. Comandos com KEYS: DEL key EXIST key EXPIRE key seconds KEYS pattern MOVE key PERSIST key TYPE keyFriday, July 1, 2011
  53. 53. Comandos de servidor: DBSIZE MONITOR INFO SELECT BGSAVE SAVE FLUSHALL FLUSHDBFriday, July 1, 2011
  54. 54. PersistênciaFriday, July 1, 2011
  55. 55. Persistência? Por padrão o redis persiste os dados fazendo um dump assíncrono com o snapshot atual. * A cada X segundos se ao menos Y chaves forem criadas * Nome do arquivo é: dump.rdb (pode ser modificado) * Compressão usando LZF do dump para as strings comando redis: save 300 2000Friday, July 1, 2011
  56. 56. ReplicationFriday, July 1, 2011
  57. 57. Replication * Simples de configurar e usar * Um mestre pode ter vários slaves * Um slave aceita conexões de outros slaves * Slaves reconectam automagicamente caso o link com o master caia. Criando um slave live: * slaveof <masterip> <masterport>Friday, July 1, 2011
  58. 58. publish/subscribe Quando precisamos avisar a outros que as coisas mudaramFriday, July 1, 2011
  59. 59. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidosFriday, July 1, 2011
  60. 60. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISHFriday, July 1, 2011
  61. 61. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexpFriday, July 1, 2011
  62. 62. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBEFriday, July 1, 2011
  63. 63. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canalFriday, July 1, 2011
  64. 64. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canal * MESSAGEFriday, July 1, 2011
  65. 65. Pub/Sub É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos * PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp * SUBSCRIBE É necessário ser listener de um canal * MESSAGE Mensagem enviada para os listenersFriday, July 1, 2011
  66. 66. O quanto é rápido? Redis possui uma ferramenta de benchmark $ ./redis-benchmark -q -n 100000Friday, July 1, 2011
  67. 67. Redis Monitor $ telnet 127.0.0.1 6379 monitor Redis Tools https://github.com/antirez/redis-tools Teste online http://try.redis-db.com/Friday, July 1, 2011
  68. 68. Cluster no Redis? * Na versão 3.0 suporte a cluster oficialmente.Friday, July 1, 2011
  69. 69. Perguntas? Maxwell Dayvson dayvson@gmail.com maxwell.silva@corp.terra.com.br #twitter @dayvsonFriday, July 1, 2011

×