58
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

NoSql - Key Value

Embed Size (px)

DESCRIPTION

An overview of Key Value NoSql database, with a focus on Redis

Citation preview

Page 1: NoSql - Key Value

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

Page 2: NoSql - Key Value
Page 3: NoSql - Key Value
Page 4: NoSql - Key Value

Key Value DATABASE

Page 5: NoSql - Key Value
Page 6: NoSql - Key Value

Usage pattern

write-heavyapplications

Natura dei dati

altamente dinamici

molto variabili

crescono velocemente

Page 7: NoSql - Key Value

Key-Value Store

Page 8: NoSql - Key Value

Key-Value Store

Data Model: associative array

Primary Key

Coppia chiave-valore

Valore: qualsiasi!

Page 9: NoSql - Key Value

Amazon Dynamo

“An extra tenth of second in response times will cost us 1% in sales” - Amazon

Page 10: NoSql - Key Value

Assunzioni e Requisiti

Page 11: NoSql - Key Value

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

Page 12: NoSql - Key Value

Obiettivi di Design

Page 13: NoSql - Key Value

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

Page 14: NoSql - Key Value

System Interface

Page 15: NoSql - Key Value

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

Page 16: NoSql - Key Value

Data Partitioning

Dynamo deve scalare incrementalmente!Ha bisogno di un meccanismo di partizionamento dei dati su un set di nodi (hosts)

Page 17: NoSql - Key Value

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

Page 18: NoSql - Key Value
Page 19: NoSql - Key Value

Distribuzione nodi non uniforme

Distribuzione dati non uniforme

Eterogeneità dei nodi

Page 20: NoSql - Key Value

Virtual Servers

Page 21: NoSql - Key Value

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

Page 22: NoSql - Key Value

Replicazione

la “standard mode of operation” di Dynamo prevede i crash delle macchineper assicurare availability dei dati, gli stessi vengono replicati!

Page 23: NoSql - Key Value

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

Page 24: NoSql - Key Value
Page 25: NoSql - Key Value
Page 26: NoSql - Key Value

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

Page 27: NoSql - Key Value

Vantaggi

Page 28: NoSql - Key Value

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

Page 29: NoSql - Key Value

Svantaggi

Page 30: NoSql - Key Value

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

Page 31: NoSql - Key Value

Chi usa Redis?

http://redis.io

Page 32: NoSql - Key Value

Chi usa Redis?

http://redis.io

Page 33: NoSql - Key Value

Redis Data Types

Page 34: NoSql - Key Value

Strings

Page 35: NoSql - Key Value
Page 36: NoSql - Key Value

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!

Page 37: NoSql - Key Value
Page 38: NoSql - Key Value

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!

Page 39: NoSql - Key Value
Page 40: NoSql - Key Value

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

Page 41: NoSql - Key Value

Lists

Page 42: NoSql - Key Value
Page 43: NoSql - Key Value

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

Page 44: NoSql - Key Value

Hashes

Page 45: NoSql - Key Value
Page 46: NoSql - Key Value

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)

Page 47: NoSql - Key Value

Sets Sorted Sets

Page 48: NoSql - Key Value
Page 49: NoSql - Key Value

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

Page 50: NoSql - Key Value
Page 51: NoSql - Key Value

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)

Page 52: NoSql - Key Value
Page 53: NoSql - Key Value

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)

Page 54: NoSql - Key Value
Page 55: NoSql - Key Value

Replication

Page 56: NoSql - Key Value

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

Page 57: NoSql - Key Value
Page 58: NoSql - Key Value

Scarica questa presentazionehttp://goo.gl/NHIC8k

Giovanni [email protected]

Università degli Studi di Salerno