FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
-
Upload
maxwell-dayvson-da-silva -
Category
Documents
-
view
3.061 -
download
5
description
Transcript of 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
Quais os tipos de NoSQL?
Friday, July 1, 2011
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
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
Inspirados pelo BigTable do Google. Suportam um grande número de colunas e linhas,permitindo buscas pelas colunas.
Colunas
Friday, July 1, 2011
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
O tipo mais simples. Armazenam apenas “uma chave e um respectivo valor”.
Chave/Valor
Friday, July 1, 2011
REDIS
Friday, July 1, 2011
Porque REDIS?
Friday, July 1, 2011
* Incrivelmente rápido
Porque REDIS?
Friday, July 1, 2011
* Incrivelmente rápido* I/O não bloqueante
Porque REDIS?
Friday, July 1, 2011
* Incrivelmente rápido* I/O não bloqueante* 100.000+ leitura/escrita por segundo.
Porque REDIS?
Friday, July 1, 2011
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
Que tipos de dados eu posso armazenar?
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings* Integers
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings* Integers* Hash
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings* Integers* Hash* Lists
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings* Integers* Hash* Lists* Sets
Friday, July 1, 2011
Que tipos de dados eu posso armazenar?
* Strings* Integers* Hash* Lists* Sets* Sorted Sets
Friday, July 1, 2011
Manifesto?
Friday, July 1, 2011
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
Clients para Redis:
Friday, July 1, 2011
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
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, 2011
Para mudanças rápidas podemos usar o REDIS
Friday, July 1, 2011
Friday, July 1, 2011
NO
Procuramos a melhor ferramenta para resolver o problema da melhor forma.
Friday, July 1, 2011
Quando eu uso?
Friday, July 1, 2011
Quando eu uso?
* Cache
Friday, July 1, 2011
Quando eu uso?
* Cache* Stock Prices
Friday, 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 collection
Friday, July 1, 2011
Quando eu uso?
* Cache* Stock Prices* Sharding Directory Service (github)* Real Time data collection* Real Time Communication
Friday, July 1, 2011
Quando eu uso?
* Cache* Stock Prices* Sharding Directory Service (github)* Real Time data collection* Real Time Communication* Analytics
Friday, July 1, 2011
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
Rodando os testes :)$ make test
Friday, July 1, 2011
Run client redis builtin$ ./redis-cliredis> set produto terratvredis> get produto
Start Redis Server$ ./redis-server
Friday, July 1, 2011
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
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
Comandos com KEYS:
DEL keyEXIST keyEXPIRE key seconds
KEYS pattern MOVE keyPERSIST key TYPE key
Friday, July 1, 2011
Comandos de servidor:
SELECTBGSAVESAVE
DBSIZEMONITORINFO
FLUSHALLFLUSHDB
Friday, July 1, 2011
Persistência
Friday, 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 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
Replication
Friday, July 1, 2011
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
publish/subscribeQuando precisamos avisar a outros que as coisas mudaram
Friday, July 1, 2011
Pub/SubÉ um modelo onde você pode registrar listeners dentro para um determinado evento e notificar todos os listeners envolvidos
Friday, July 1, 2011
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
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
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
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
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
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
O quanto é rápido?Redis possui uma ferramenta de benchmark
$ ./redis-benchmark -q -n 100000
Friday, July 1, 2011
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
Cluster no Redis?* Na versão 3.0 suporte a cluster oficialmente.
Friday, July 1, 2011