NoSql - Key Value

Preview:

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 Granogranogiovanni90@gmail.com

Università degli Studi di Salerno

Recommended