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

69
Remote Dictionary Server Maxwell Dayvson - @dayvson [email protected] Friday, July 1, 2011

description

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.

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

Page 2: FISL12 - Redis e as facilidades de trabalhar com um banco de dados 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.

Premissas NoSQL

Friday, July 1, 2011

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

Quais os tipos de NoSQL?

Friday, July 1, 2011

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

Quais os tipos de NoSQL?

Chave/Valor• Amazon Dynamo• Membase• Redis• Scalaris• Voldemort

Documento• Amazon SimpleDb• Apache Couchdb• MongoDb• Riak

Colunas• Cassandra• BigTable• HBase• Hyperbase

Grafo• Neo4j• InfoGrid• Sones• HyperGraphDB

Friday, July 1, 2011

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

São baseados em documentos XML ou JSON,podem ser buscados por uma chave única ou porqualquer outro valor contido no documento.

Documento

Friday, July 1, 2011

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

Inspirados pelo BigTable do Google. Suportam um grande número de colunas e linhas,permitindo buscas pelas colunas.

Colunas

Friday, July 1, 2011

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

São os mais complexos devido ao fato de que os documentos não são armazenados em listas, mas em objetos.

Grafo

Friday, July 1, 2011

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

O tipo mais simples. Armazenam apenas “uma chave e um respectivo valor”.

Chave/Valor

Friday, July 1, 2011

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

REDIS

Friday, July 1, 2011

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

Porque REDIS?

Friday, July 1, 2011

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

* Incrivelmente rápido

Porque REDIS?

Friday, July 1, 2011

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

* Incrivelmente rápido* I/O não bloqueante

Porque REDIS?

Friday, July 1, 2011

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

* Incrivelmente rápido* I/O não bloqueante* 100.000+ leitura/escrita por segundo.

Porque REDIS?

Friday, July 1, 2011

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

* Incrivelmente rápido* I/O não bloqueante* 100.000+ leitura/escrita por segundo.* As chaves e valores podem expirar (ou não)

Porque REDIS?

Friday, July 1, 2011

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

* 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

Porque REDIS?

Friday, July 1, 2011

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

* 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

Porque REDIS?

Friday, July 1, 2011

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

* 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

Porque REDIS?

Friday, July 1, 2011

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

* 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

Porque REDIS?

Friday, July 1, 2011

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

* 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)

Porque REDIS?

Friday, July 1, 2011

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

* 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.

Porque REDIS?

Friday, July 1, 2011

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

* 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

Porque REDIS?

Friday, July 1, 2011

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

* 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 Sponsor

Porque REDIS?

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings* Integers

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings* Integers* Hash

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings* Integers* Hash* Lists

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings* Integers* Hash* Lists* Sets

Friday, July 1, 2011

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

Que tipos de dados eu posso armazenar?

* Strings* Integers* Hash* Lists* Sets* Sorted Sets

Friday, July 1, 2011

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

Manifesto?

Friday, July 1, 2011

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

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

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

Clients para Redis:

Friday, July 1, 2011

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

Clients para Redis:

* C* C#* C++* Clojure* Common Lisp* Erlang* Go

* Haskell* haXe* Java* Lua* Node.JS* Objetive C* Perl

* PHP* Python* Ruby* Scala* SmallTalk* Tcl

Friday, July 1, 2011

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

Quem usa o REDIS?

Friday, July 1, 2011

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

Quem usa o REDIS?

Friday, July 1, 2011

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

Como eu posso enviar updates real time(live) para 100.000, 500.000, 1.000.000 usuários conectados?

Friday, July 1, 2011

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

Para mudanças rápidas podemos usar o REDIS

Friday, July 1, 2011

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

Friday, July 1, 2011

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

NO

Procuramos a melhor ferramenta para resolver o problema da melhor forma.

Friday, July 1, 2011

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

Quando eu uso?

Friday, July 1, 2011

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

Quando eu uso?

* Cache

Friday, July 1, 2011

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

Quando eu uso?

* Cache* Stock Prices

Friday, July 1, 2011

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

Quando eu uso?

* Cache* Stock Prices* Sharding Directory Service (github)

Friday, July 1, 2011

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

Quando eu uso?

* Cache* Stock Prices* Sharding Directory Service (github)* Real Time data collection

Friday, July 1, 2011

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

Quando eu uso?

* Cache* Stock Prices* Sharding Directory Service (github)* Real Time data collection* Real Time Communication

Friday, July 1, 2011

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

Quando eu uso?

* Cache* Stock Prices* Sharding Directory Service (github)* Real Time data collection* Real Time Communication* Analytics

Friday, July 1, 2011

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

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$ make

Friday, July 1, 2011

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

Rodando os testes :)$ make test

Friday, July 1, 2011

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

Run client redis builtin$ ./redis-cliredis> set produto terratvredis> get produto

Start Redis Server$ ./redis-server

Friday, July 1, 2011

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

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 person

Friday, July 1, 2011

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

Comandos básicos:

SET [key value]GET [key]MGET [key1, key2, key3, key4]MSET [key1 value, key2 value, key3 value, key4 value]

TYPE KEYINCR KEYDECR KEY

APPEND KEY VALUESUBSTR KEY 0 1

Friday, July 1, 2011

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

Comandos com KEYS:

DEL keyEXIST keyEXPIRE key seconds

KEYS pattern MOVE keyPERSIST key TYPE key

Friday, July 1, 2011

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

Comandos de servidor:

SELECTBGSAVESAVE

DBSIZEMONITORINFO

FLUSHALLFLUSHDB

Friday, July 1, 2011

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

Persistência

Friday, July 1, 2011

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

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 2000

Friday, July 1, 2011

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

Replication

Friday, July 1, 2011

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

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

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

publish/subscribeQuando precisamos avisar a outros que as coisas mudaram

Friday, July 1, 2011

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

Pub/SubÉ um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* PUBLISH

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp

* SUBSCRIBE

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp

* SUBSCRIBE É necessário ser listener de um canal

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* PUBLISH É possível enviar mensagens para um canal específico ou utilizando regexp

* SUBSCRIBE É necessário ser listener de um canal

* MESSAGE

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

Pub/Sub

* 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 listeners

É um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos

Friday, July 1, 2011

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

O quanto é rápido?Redis possui uma ferramenta de benchmark

$ ./redis-benchmark -q -n 100000

Friday, July 1, 2011

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

https://github.com/antirez/redis-toolsRedis Tools

Redis Monitor$ telnet 127.0.0.1 6379monitor

http://try.redis-db.com/Teste online

Friday, July 1, 2011

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

Cluster no Redis?* Na versão 3.0 suporte a cluster oficialmente.

Friday, July 1, 2011