Upload
giovanni-grano
View
146
Download
0
Tags:
Embed Size (px)
DESCRIPTION
An overview of Key Value NoSql database, with a focus on Redis
Citation preview
KEY-VALUE DATABASE
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
Branca Carlo Grano Giovanni
Merola Matteo Scalabrino Simone
Redis
Key Value DATABASE
Usage pattern
write-heavyapplications
Natura dei dati
altamente dinamici
molto variabili
crescono velocemente
Key-Value Store
Key-Value Store
Data Model: associative array
Primary Key
Coppia chiave-valore
Valore: qualsiasi!
Amazon Dynamo
“An extra tenth of second in response times will cost us 1% in sales” - Amazon
Assunzioni e Requisiti
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
Obiettivi di Design
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
System Interface
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
Data Partitioning
Dynamo deve scalare incrementalmente!Ha bisogno di un meccanismo di partizionamento dei dati su un set di nodi (hosts)
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’anelloOgni nodo è responsabile della
regione tra sé e il suo predecessore
Distribuzione nodi non uniforme
Distribuzione dati non uniforme
Eterogeneità dei nodi
Virtual Servers
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
Replicazione
la “standard mode of operation” di Dynamo prevede i crash delle macchineper assicurare availability dei dati, gli stessi vengono replicati!
Replicazione
la “standard mode of operation” di Dynamo prevede i crash delle macchineper 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
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
Supporto linguaggi
Free
Vantaggi
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
Svantaggi
Svantaggi
RAM
L’ammontare di RAM richiesta è proporzionale alla grandezza del dataset. Grossi dataset in Redis sono veloci ma
costosi!
MemoriaRedis richiede l’intero dataset in memoria. Ciò aumenta le prestazioni ma è il fattore
che ne crea i principali limiti
PersistenzaLa persistenza in Redis è altamente
configurabile, ma la sua implementazione richiede un grosso uso di risorse di I/O
Chi usa Redis?
http://redis.io
Chi usa Redis?
http://redis.io
Redis Data Types
Strings
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!
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!
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
Lists
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 testaRPUSH aggiunge un elemento in codaLRANGE estrae un range di elementi
LPOP/RPOP fa un pop dalla lista e ne ritorna il valore corrispondente
Hashes
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 valoriTime complexity O(N)
!HGET restituisce il valore associato
al field un una hashTime complexity O(1)
!HGETALL restituisce tutti i campi e i
valori della hashTime complexity O(N)
Sets Sorted Sets
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 chiaviTime complexity O(1)
!SISMEMBER controlla se quell’elemento fa
parte di un set
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)
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 setTime complexity O(log(N)+M)
Replication
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
Scarica questa presentazionehttp://goo.gl/NHIC8k
Giovanni [email protected]
Università degli Studi di Salerno