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

Post on 03-Jul-2015

3.061 views 5 download

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

Remote Dictionary Server

Maxwell Dayvson - @dayvsonmaxwell.silva@corp.terra.com.br

Friday, July 1, 2011

• 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