1. Università degli Studi di Salerno
Sistemi Informatici e Tecnologie del Software
!
Basi di Dati II
Anno 2013/2014
Prof.ssa G.Tortora Prof. G.Polese
KEY-VALUE DATABASE
Branca Carlo
Grano Giovanni
Merola Matteo
Scalabrino Simone
Redis
11. Assunzioni e Requisiti
Query Model
il grosso dei dati dei servizi Amazon lavora su una
semplice query e non ha bisogno di schemi
relazionali
ACID Properties
garantire ACID porta minore availabilty; Dynamo si
rivolge ad applicazioni che lavorano con più
scarsa consistency (la “C” in ACID) e ciò si
traduce in maggior availability
Efficiency
i servizi Amazon hanno requisiti di latenza molto
severi
13. Obiettivi di Design
Service Level Agreements
ogni singola dipendenza nella piattaforma deve
offrire la sua funzionalità con limiti ancor più stretti
Incremental scalability
capacità di scalare su ogni singolo nodo di
storage con minimo impatto sul resto del sistema
Simmetry
ogni nodo ha le stesse responsabilità dei suoi pari
Decentralization
favorire le tecniche di decentralizzazione peer-to-peer
su tecniche di controllo centralizzato
Heterogeneity
capacità di sfruttare l’infrastruttura eterogenea del
sistema per girare
15. System Interface
get(key)
localizza la replica dell’oggetto associato alle
key nel sistema di storage e restituisce un
singolo oggetto (o un lista) insieme al suo
contesto
put(key, context, object)
determina dove le repliche dell’oggetto devono
essere posizionate in base alla chiave
associata e le scrive sul disco
Contesto? insieme di metadati su un oggetto, trasparenti
al chiamante, utilizzati per l’implementazione
del versioning
16. Data Partitioning
Dynamo deve scalare incrementalmente!
Ha bisogno di un meccanismo di partizionamento dei dati su un set di nodi (hosts)
17. Data Partitioning
Dynamo deve scalare incrementalmente!
Ha bisogno di un meccanismo di partizionamento dei dati su un set di nodi (hosts)
Consistent Hashing
L’output di una funzione di hash è
trattata come spazio circolare
Ogni nodo è associato a un valore
random che rappresenta la sua
posizione sull’anello
Ogni nodo è responsabile della
regione tra sé e il suo
predecessore
21. Virtual Servers
Ogni nodo associato a punti multipli sul ring
Ogni nodo virtuale si comporta come un singolo nodo, ma è responsabile
di uno o più nodi virtuali
Virtual Server (regioni): gestite dallo stesso nodo
22. Replicazione
la “standard mode of operation” di Dynamo prevede i crash delle macchine
per assicurare availability dei dati, gli stessi vengono replicati!
23. Replicazione
la “standard mode of operation” di Dynamo prevede i crash delle macchine
per assicurare availability dei dati, gli stessi vengono replicati!
Ogni dato è replicato su N host successori.
Ogni chiave k è associata un nodo
coordinatore, che si fa carico di replicare le
chiavi che cadono nel suo range.
Preference List
Una lista di nodi che contengono le
repliche; contiene più di N nodi.
Skip dei nodi virtuali!
Aumento prestazioni: richieste read-only in
qualsiasi replica
24.
25.
26. Data Structures
Server
non un KV tradizionale; in Redis il valore non è
semplicemente una stringa!
Complex data
structures
Redis include diversi tipi build-in, gli stessi data
types fondamentali che troviamo nel software
In-Memory
Free
Supporto linguaggi
28. Vantaggi
Performance!
>100k+ operazioni SET per secondo
>80k + operazioni GET per secondo
Atomicità!
Ogni comando primitivo in Redis è atomico!
È possibile combinare primitive multiple in
unità atomiche più grandi
Polyglot Persistence
Usare Redis non richiede il suo utilizzo
esclusivo!
Data Types!
I tipi di dati offerti sono funzionali! Liste, sets,
hashes sono più familiari per un
programmatore rispetto a tabella, colonne e
righe
30. Svantaggi
RAM
L’ammontare di RAM richiesta è
proporzionale alla grandezza del dataset.
Grossi dataset in Redis sono veloci ma
costosi!
Memoria
Redis richiede l’intero dataset in memoria.
Ciò aumenta le prestazioni ma è il fattore
che ne crea i principali limiti
Persistenza
La persistenza in Redis è altamente
configurabile, ma la sua implementazione
richiede un grosso uso di risorse di I/O
36. Get & Set di una chiave
!
Il tipo String è il valore più semplice
associabile ad una chiave in Redis.
Usando il tipo stringa come valore, stiamo
mappando una stringa con un’altra stringa
!
I valori possono essere stringhe (inclusi
binary data) di ogni tipo! Ad esempio, è
possibile associare a una chiave un
immagine jpeg!
37.
38. Comportamento di Set
!
Un argomento addizionale può gestire il
comportamento di SET
!
Operatori Atomici di Incremento
!
GET o SET di chiavi multiple con un unico
valore!
39.
40. Modifica e Interrogazione dello spazio
delle chiavi
!
EXISTS restituisce 1 o 0 per una data chiave
a seconda esista o meno nel database
!
DEL cancella una chiave e il suo valore
associato
!
TYPE restituisce il tipo di valore associato
alla specifica chiave
43. Operazioni Base
!
Le liste in Redis vengono implementate
come liste concatenate.
Pro: l’operazione di aggiunta di un nuovo
elemento in testa o in coda alla lista avviene
in tempo costante.
Contro: accedere a un elemento in un indice
specifico è un’operazione lenta.
!
LPUSH aggiunge un elemento in testa
RPUSH aggiunge un elemento in coda
LRANGE estrae un range di elementi
LPOP/RPOP fa un pop dalla lista e ne ritorna
il valore corrispondente
46. Operazioni base
!
Le hashes di Redis sono
esattamente quello che ci si
aspetterebbe da una hash
tradizionale. Sono perfette per
mappare oggetti complessi.
!
HMSET imposta i campi indicati ai
loro rispettivi valori
Time complexity O(N)
!
HGET restituisce il valore associato
al field un una hash
Time complexity O(1)
!
HGETALL restituisce tutti i campi e i
valori della hash
Time complexity O(N)
49. Un Set in Redis è una collezione non ordinata
di stringhe
Gli elementi di un set non possono avere
duplicati
Disponiamo di una serie di operazioni tipiche,
quali intersezione, unione o differenza
!
SADD aggiunge uno specifico membro/i a un
set di chiavi
Time complexity O(1)
!
SISMEMBER controlla se quell’elemento fa
parte di un set
50.
51. Rimozione da un Set
!
SPOP restituisce e rimuove un elemento
random dal set di valori di una chiave
(simile a SRANDMEMBER, che ritorna un
valore random senza rimuoverlo)
Time complexity O(1)
!
SREM rimuove uno specifico valore da un
set di una chiave
Time complexity O(N)
52.
53. SORTED SET - Operazione Base
!
I Sorted Sets in Redis sono un tipo di dati
simile ad un mix tra un Set e un hash, con la
differenza che mentre gli elementi in un set
non sono ordinati, ogni elemento in un sorted
set è associato con un floating point value
chiamato score.
!
ZADD aggiunge uno specifico membro con il
suo score a un sorted set per la chiave
indicata.
Time complexity O(log(N))
!
ZRANGE restituisce uno specifico range di
elementi in un sorted set
Time complexity O(log(N)+M)
56. Replication
Scalabilità
Slaves multipli solamente per richieste read-only
SLAVEOF
Snapshot del master sullo slave
Non bloccante
Né lato master, né lato slave
Flessibile
Qualsiasi topologia possibile
57.
58. Scarica questa presentazione
http://goo.gl/NHIC8k
Giovanni Grano
granogiovanni90@gmail.com
Università degli Studi di Salerno