Introdução ao Redis

Text

\begin{equation*} \eta = - \frac{\dot{W}}{\dot{Q}_h} = 1+\frac{\dot{Q}_c}{\dot{Q}_h} = \bigpar{1-\frac{T_c}{T_h}}-\frac{T_c}{\dot{Q}_h}\Pi = \eta_C-\frac{T_c}{\dot{Q}_h}\Pi \end{equation*}

Modelagem de BD

Bancos de Dados SQL

  • PostgreSQL, MariaDB, SQlite
  • Linguagem SQL
  • Consultas diversas

Desvantagens:

  • Alta latência
  • Difícil reestruturação do modelo
SELECT Nome_Artista,Nome 
FROM Artista A,Usuário_Titular S,Escuta E,Toca T,Usuário U  
WHERE E.Usuário_ID = U.Usuário_ID 
  AND E.Música_ID  = T.Música_ID 
  AND T.Artista_ID = A.Artista_ID 
  AND A.cidade     = S.cidade 
  AND U.Usuário_ID = S.Usuário_ID;


SELECT Nome_Artista
FROM Artista,(SELECT DISTINCT Artista_ID,Lista_ID FROM Produz) AS P1
WHERE Artista.Artista_ID = P1.Artista_ID 
AND NOT EXISTS (SELECT * 
		FROM Produz P2
		WHERE P1.Lista_ID = P2.Lista_ID
		AND P2.Artista_ID <> P1.Artista_ID)
AND EXISTS (SELECT * 
            FROM Compõe,Toca T1
            WHERE Compõe.Música_ID = T1.Música_ID 
            AND P1.Lista_ID = Compõe.Lista_ID
            AND NOT EXISTS (SELECT * 
                            FROM Toca T2
                            WHERE T2.Música_ID = Compõe.Música_ID
                            AND T1.Artista_ID <> T2.Artista_ID));

Propriedades ACID

  • Atomicidade
    A transação deve ter todas as suas operações executadas em caso de sucesso ou, em caso de falha, nenhum resultado de alguma operação refletido sobre a base de dados.
  • Consistência
    A transação deve respeitar as regras de integridade dos dados
  • Isolamento
    Cada transação só é efetuada depois que a anterior já ocorreu.
  • Durabilidade
    O resultado de todas transações executadas com sucesso é armazenado em disco.

BDs No-SQL

  • sem linguagem expressiva para consulta de dados
  • permitem que entidades armazenem um número variável de atributos.
  • (e. g. MongoDB, REDIS, Cassandra)

​Vantagens:

  • Menor latência e maior vazão
  • Facilmente particionados

Propriedades BASE

  • sica​ disponibilidade
    O Banco de Dados está disponível na maior parte do tempo
  • Estado maleável
    As transações de escrita não tem garantia que serão feitas instantaneamente e que as replicas do BD terão os mesmo estado ao mesmo tempo.
  • Eventual consistência
    Em algum tempo, todos os dados, em todas as réplicas, terão o mesmo valor (e. g. quando uma leitura for feita)

Comparação entre diferentes SGBDs

[Rabl T, 2012]

Comparação entre diferentes SGBDs

[Rabl T, 2012]

Redis

  • Remote Dictionary Server
  • BD Chave-Valor
  • Baixa latência devido ao funcionamento em memória RAM
  • Possibilita armazenamento em disco para backup
  • Clientes em várias linguagens
  • Comandos de fácil uso

Tipos de Armazenamentos
Strings


redis-cli


redis> SET mykey "Hello"
"OK"

redis> GET mykey
"Hello"


redis> MSET key1 "Hello" key2 "World"
"OK"

redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)




Tipos de Armazenamentos
Strings

redis> GET mykey
"Hello"

redis> STRLEN mykey
(integer) 5

redis> APPEND mykey " World"
(integer) 11

redis> SETRANGE mykey 6 "Redis"
(integer) 11

redis> GET mykey
"Hello Redis"









Tipos de Armazenamentos
Strings 

redis> SET mykey "10"
"OK"

redis> INCR mykey
(integer) 11

redis> DECR mykey
(integer) 10

redis> INCRBY mykey 5
(integer) 15

redis> GET mykey
"11"

redis> SET myfloat 10.50
"OK"

redis> INCRBYFLOAT myfloat 0.1
"10.6"









Tipos de Armazenamentos
Chaves

redis> SET key1 "Hello"
"OK"

redis> EXISTS key1
(integer) 1

redis> EXISTS nosuchkey
(integer) 0

redis> TYPE key1
"string"

redis> DEL key1 key2 key3
(integer) 2

Tipos de Armazenamentos
Sets

redis> SADD myset "Hello"
(integer) 1

redis> SADD myset "World"
(integer) 1

redis> SADD myset "World"
(integer) 0

redis> SMEMBERS myset
1) "World"
2) "Hello"

redis> SISMEMBER myset "Hello"
(integer) 1

redis> SCARD myset
(integer) 2


Tipos de Armazenamentos
Sets

redis> SMEMBERS myset
1) "World"
2) "Hello"

redis> SADD myotherset "Hello" "there"
(integer) 1

redis> SINTER myset myotherset
1) "Hello"

redis> SDIFF myset myotherset
1) "World"



Tipos de Armazenamentos
Sorted Sets

redis> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3

redis> ZADD myzset 1 "uno"
(integer) 1

redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"

redis> ZRANGE myzset 2 3
1) "three"

Tipos de Armazenamentos
(Linked) Lists

redis> RPUSH mylist "one"
(integer) 1

redis> RPUSH mylist "two"
(integer) 2

redis> RPUSH mylist "three"
(integer) 3

redis> RPOP mylist
"three"

redis> LRANGE mylist 0 -1
1) "one"
2) "two"

redis> LPOP mylist
"one"

redis> LRANGE mylist 0 -1
1) "two"

Tipos de Armazenamentos
Hashes

redis> HMSET myhash field1 "Hello" field2 "World"
"OK"

redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)

redis> HKEYS myhash
1) "field1"
2) "field2"

redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"

Tipos de Armazenamentos
Georeferenciado

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2

redis> GEODIST Sicily Palermo Catania
"166274.1516"

redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"

redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"

redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.36138933897018433"
   2) "38.11555639549629859"
2) 1) "15.08726745843887329"
   2) "37.50266842333162032"
3) (nil)

Modelo Conceitual

Modelo Entidade Relacionamento

Modelo
Físico

  • Chave-Valor: o BD não tem implementação do modelo antes da entrada de dados.
    O usuário escolhe seguir o modelo
  • Chave-Valor: Cada atributo tem uma chave
  • recomenda-se usar chaves do formato "Id_Entidade:Nome_atributo"
    (e. g. "84EC29A:Endereço" )

Modelo Lógico

Melhores Casos de uso de SGBDs Chave-Valor

  • Sistemas onde as consultas já são conhecidas previamente
  • Necessidade de baixa latência

Melhores práticas

  • Trocar Leitura e Escrita por  comandos específicos
    (e. g. INCR )
  • Armazenar atributos que são sempre processados juntos na mesma chave

Referencias

Solving big data challenges for enterprise application performance management (2012)
Rabl T, Gómez-Villamor S, Sadoghi M, Muntés-Mulero V, Jacobsen H, Mankovskii S

 

Guias?,Tutoriais?
redis.io/commands

 

 

fernando.scattone@usp.br

Introdução ao Redis

By Fernando Freire Scattone