NoSQL do tipo Key-Value Key-Value • Tipo de Banco de Dados mais simples, seu conceito é uma chave e um valor para esta chave. • É também o que mais aguenta carga de dados, sendo o que proporciona maior escalabilidade.
dados com garantia de persistência, de tempos em tempos (ou a cada n mudanças) as alterações são replicadas, de maneira assíncrona, da memória RAM para o disco. Redis vs MemCacheDB • Similares, a principal diferença refere-se a persistência dos dados.
Mantém tudo em memoria ▪ Persistencia é feita por tempo ou número de atualizações ◦ Redis não se preocupa com o que esta sendo armazenado ▪ Tudo é tratado como array de bytes.
• Não se trata de Strings como alfanuméricos. • Serve de base para outras mais complexas: ◦ List: lista de Strings ◦ Set: Set de String • Ideal para: ◦ Random access ◦ Bitmap ◦ Array de bytes
Composto por campo e valor • Ideal para armazenamento de objetos • Permite auto incremento • String mais sofisticada ◦ Mais campos ◦ Get, Set campos individualmente sem ter que reescrever todo o registro
unico que mantém items em ordem • Armazenamento de dados de sites: ◦ Mais visitados ◦ Usuário com mais acessos • Mais poderosos que lista ◦ Operações de inclusão, exclusão sempre rapidas mesmo do meio da estrutura. • Ocupa mais memória • Complexidade O(log(N)).
de representação de estado, restauração mais rapida, etc. -Perigoso em instabilidades do sistema, pode ocupar demais o servidor, etc. • AOF (registro de todas operações "write") -Sem problemas de ocupar CPU ou com instabilidades mesmo quando está sendo reescrito. -Arquivos maiores e possivel maior latencia em comparação ao RDB.
dados se encaixem na RAM ◦ Não há problema se forem valores simples ▪ Alternativa: colocar o id de um registro no Redis, o resto fica no BD relacional • VM ◦ Disponível desde a versão 2.0 ◦ Apenas as chaves ficam na RAM ◦ Valores ficam no disco ◦ Possui vários problemas e desvantagens
to simply provide the best in-memory database (but persistent on disk as usually) ever, without considering at least for now the support for databases bigger than RAM" "Our future efforts are focused into providing scripting, cluster and better persistence" http://redis.io/topics/virtual-memory
is that in order to take advantage of Redis in your production environment you don't need to switch to Redis. You can just use it in order to do new things that were not possible before, or in order to fix old problems."
e demorada ◦ muitos acessos na mesma requisição ◦ usar EXPIRE após um intervalo de tempo • Memcached ◦ somente cache ◦ sem persistência ◦ simples e rápido
WHERE ... ORDER BY time DESC LIMIT 10 ◦ Problema de escalabilidade Antirez: "É muito contra-intuitivo você precisar ordenar registros quando você apenas quer listar na mesma ordem em que foram criados"
▪ LPUSH latest.comments <id> ◦ Permitir apenas os últimos 20 ▪ LTRIM latest.comments 0 20 ▪ Usar SQL para encontrar mais ◦ E se deletar? ▪ Usar LREM ▪ Não fazer nada • quando for tentar encontrar o registro no BD relacional não achará
Passam semanas ocupando espaço no BD ◦ Quase nunca consultados por outra coluna, a não ser seu id primário • Redis store session data ◦ session:5ab5a9b054a8 = ... ◦ EXPIRE session:5ab5a9b054a8 604800 (1 semana) • Frameworks web: ◦ Boa parte usa memcached (sem persistência) ◦ Restart = login novamente
Send mail ◦ API requests • Queue ◦ LPUSH com RPOP ◦ RPUSH com LPOP • Exemplo: Resque ◦ Processa um worker dado intervalo de tempo ◦ Usa persistência ▪ tranca caso ocorra erro ▪ remove se processado com sucesso
Dificil de escalar • Opções ◦ Criar views com vários JOINS para montar as ações feitas pelas pessoas que você segue em tempo de leitura. ◦ Conceito de inbox, onde cada ação é um registro separado para todos os seguidores. (Melhor)
-1 rubinho ◦ ZADD formula1:colocacao 5 massa ◦ ZADD formula1:colocacao 10 senna ◦ ZREVRANGEBYSCORE formula1:colocacao 10 0 • Fácil de criar a partir de outras através do ZUNION/SUM • Grande uso para aplicações de jogos