NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Post on 27-Jan-2015

141 views 1 download

description

Seconda parte del seminario su NoSQL al DiTeDi di Udine del 15/12/2012. Presentata un'introduzione sulle basi di dati non relazionali e sulle implicazioni che le loro caratteristiche hanno nello sviluppo di applicazioni enterprise.

Transcript of NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

NoSQL Data Stores Introduzione alle basi di dati non relazionali

DiTeDi, Udine - Italia 15-12-2012

Architettura Web ‘Classica’

Architettura Web ‘Classica’

4

5

6

Termine Usurpato!

Carlo Strozzi http://www.strozzi.it/users/carlo/vitae.html

Concetti totalmente nuovi?!?

Concetti totalmente nuovi?!?

DBM

Le origini di Tokyo Cabinet

DBM

Chi conosce questo signore?

E questo?

E questo?

Ken Thompson http://en.wikipedia.org/wiki/Ken_Thompson

Eppure...

PERCHÈ QUESTA HYPE?

MOLTI PIÙ DATI

Big Data

http://blog.thomsonreuters.com/index.php/big-data-graphic-of-the-day/

VARIABILITÀ DEI DATI

Progresso tecnologico

http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/12_MassStorage.html

Costo 1MB DRAM

CONNESSIONI

MOLTI PIÙ ACCESSI

Dynamo BigTable

Implementazione di Dynamo

Cenni su Riak • Database key-value • Interfaccia HTTP • Usando i link si possono collegare chiavi

fra di loro • CAP «configurabile» (si può decidere fra

coerenza e disponibilità per ciascuna richiesta)

• Supporta ricerca full-text

Clustering

28

Fonte: http://wiki.basho.com/

Persistenza Configurabile

29

N R W

numero nodi del cluster in cui replicare il dato

Replicazione

30

Fonte: http://wiki.basho.com/

Persistenza Configurabile

31

N R W

numero nodi da cui il dato deve essere letto affinchè sia considerato valido

Persistenza Configurabile

32

N R W

numero nodi in cui il dato deve essere scritto affinchè la scrittura sia considerata valida

Coerenza eventuale

33

W + R <= N

Quorum

34

W + R > N

Recap su Riak: • Interfaccia HTTP • Adatto alle situazioni in cui c’è bisogno di

HA • Senza rinunciare ad alcune comode

operazioni sui dati (usando links, pre/post commit hooks)

• Non adatto se c’è necessità di eseguire query complesse

35

Implementazione di BigTable

http://hadoop-hbase.blogspot.it/2011/12/introduction-to-hbase.html

Salvataggio dei dati

Salvataggio dei dati

Es. Data Location: Stefano Valle/Profilo:Paese

Cenni su HBase

• Controllo di versione incorporato • Compressione • Garbage collection • Tabelle in memoria • Coerenza (no availability) • Write Ahead Logging • Basato su Hadoop • Pensato per cluster grandi (5-20 nodi)

SCALABILITÀ ORIZZONTALE

ACID Atomic Consistent Isolated Durable

BASE Basic Available Soft State Eventually Consistent

Concentriamoci sull’Atomicità

43

Ordine

Oggetto 1

Oggetto 2

Cliente

Aggiornamento ordine

DA ENTITÀ RELAZIONI

AD AGGREGATI

Aggregate data model

order_id = 1001

date = 2012-11-10

total_amount = 10.00€

name = Johnny

surname = Appleseed

product_name: Pear

quantity: 2

item_price: 2.50€

total_price: 5.00€

product_name: Mango

quantity: 1

item_price: 5.00€

total_price: 5.00€

ACID con gli aggregati

47

Ordine

Oggetto 1

Oggetto 2

Cliente

Aggiornamento ordine

order_id = 1001

date = 2012-11-10

total_amount = 10.00€

name = Johnny

surname = Appleseed

product_name: Pear

quantity: 2

item_price: 2.50€

total_price: 5.00€

product_name: Mango

quantity: 1

item_price: 5.00€

total_price: 5.00€

COME SONO I DATI SU RDBMS?

COME LI VORREMMO UTILIZZARE?

Impedence Mismatch Film Genere Drammatico:

Film Genere Western:

Film Genere Commedia:

Titolo Anno Visioni

Schindler’s List 1993 3454

Pulp Fiction 1994 2114

Il Padrino 1972 3873

Titolo Anno Visioni

Il buono, il brutto, il cattivo 1966 7834

Titolo Anno Visioni

Mamma ho perso l’aereo 1990 3555

Impedence Mismatch

Impedence Mismatch

JOIN per evitare molteplici query

Dati in forma aggregata: {

"genere":"Drammatico",

"film":[

{

"titolo":"Schindler's List",

"visioni":3454,

"anno":1993

},

{

"titolo":"Pulp Fiction",

"visioni":2114,

"anno":1994

},

{

"titolo":"Il Padrino",

"visioni":3873,

"anno":1972

}

]

}

SCHEMALESS IS A LIE!

Da...

55

Dati

Room TV Pannello Controllo

Analisi Statistiche

A...

56

Dati

API

Room TV Pannello Controllo

Analisi Statistiche

O meglio...

57

Metadati

API

Dati hotel

API

Statistiche

API

Room TV Pannello Controllo

Analisi Statistiche

Domain Driven Design

58

59

Fonte: http://www.domainlanguage.com/ddd/patterns/

60

Fonte: http://www.domainlanguage.com/ddd/patterns/

+ CQRS

POLYGLOT PERSISTANCE

Come scegliere?

TRADEOFFS

PERSISTENZA VS SPEED

DISPONIBILITÀ VS COERENZA

TCO, CONOSCENZE INTERNE

TEMPO, RISORSE, FATICA

SOLIDITÀ

Hosting

69

MODELLO DATI

Modello dati Dimensione

Complessità

Key Value

Colonne

Documentale

A grafo

> 90% dei casi d’uso

Fonte: http://www.slideshare.net/emileifrem/an-overview-of-nosql-jfokus-2011

KEY/VALUE

Esempi

73

Confronto

74

replication sharding support

multi-master support

Memcached No (use repcached instead)

Yes (through client library)

No (use repcached instaed)

Project Voldemort

Async Yes Yes

Redis Async No No

Riak Async Peer-based

Yes Yes

Confronto (2)

75

data storage

concurrency control

data types durability

Memcached RAM Lock-free Blob n.a.

Project Voldemort

RAM, BDB, MySql, others

MVCC Typed Data storage dependant

Redis RAM + disk Locks Semi-typed Append-only log

Riak RAM, disk MVCC (Vector-clocks)

Semi-typed Durable write quorum

Confronto (3)

76

requires compaction

transactions secondary indexex

Memcached No No No

Project Voldemort

Data storage dependant

No No

Redis Snapshot Yes (multi operations queues)

No

Riak No No Yes

Confronto (4)

77

security interface protocol

query support

language

Memcached Via SASL TCP, UDP Commands C

Project Voldemort

None Protocol Buffers, Thrift, Avro and Java Serialization

Commands Java

Redis Passwords Simple text over TCP

Commands C/C++

Riak None HTTP, protobuf

Map reduce (weak support)

Erlang

DOCUMENTALE

Esempi

79

Confronto

80

replication sharding support

multi-master support

CouchDB Master-master Yes (with filters in BigCouch)

Yes

MongoDB Master-slave (replica sets)

Yes No

OrientDB Master-master Dec. 2012 / Jan. 2013

Yes

RavenDB Master-master Yes Yes

Confronto (2)

81

data storage

concurrency control

data types durability

CouchDB Disk Lock-free MVCC

JSON Crash-only

MongoDB Disk Write lock BSON Write-ahead log, safe mode

OrientDB Disk MVCC JSON Write-ahead log

RavenDB RAM, Disk Configurable optimistic concurrency

JSON Write-ahead log, snapshot (via ESE)

Confronto (3)

82

requires compaction

transactions secondary indexex

CouchDB Yes, file rewrite No Yes

MongoDB No No Yes

OrientDB No Yes No

RavenDB No Yes Yes

Confronto (4)

83

security interface protocol

query support

language

CouchDB Users HTTP (REST)

Map reduce (weak support)

Erlang

MongoDB Users Binary over TCP

Commands, map reduce

C++

OrientDB Users, ACL

HTTP (REST), Binary over TCP

SQL(+), Tinkerpop

Java

RavenDB Users .NET API, HTTP (REST)

LINQ C#

COLONNE

Esempi

85

GRAFO

Flock

87

Esempi

COSA PORTARE A CASA

ONE SIZE DOES NOT FIT ALL

DATABASE RELAZIONALI

DATASTORE NOSQL

GRAZIE

DOMANDE?

http://www.mvassociati.it/

http://www.hubme.in/

Per Approfondire:

96

Per Approfondire:

97

Per Approfondire:

98

Per Approfondire:

• Links: – http://nosql.findthebest.com/ – http://www.dzone.com/mz/nosql – newsletter Nosql Weekly – http://www.nosql-database.org/ – http://couchdb.apache.org/ – http://www.mongodb.org/ – http://redis.io/ – http://www.orientdb.org/ – http://www.draftq.com/ebooks/DraftQ/the-little-mongodb-book

99

Photo Credits • http://www.flickr.com/photos/kunel/246544081/ • http://www.flickr.com/photos/lordcolus/5977615749/ • http://www.flickr.com/photos/gewitterhexer/5540504147/ • http://blog.thomsonreuters.com/index.php/big -data-graphic-of-the-day/ • http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/12_MassStorage.html • http://www.nathaninfocus.com/2011/01/social-networking-phenomenon/facebook-growth-chart/ • http://www.flickr.com/photos/phuonglovejesus2782010/5055970759/ • http://www.flickr.com/photos/kalexanderson/5944050340/ • http://www.flickr.com/photos/arichards-gallery/3578048793/ • http://www.flickr.com/photos/jabb/6956142046/ • http://www.flickr.com/photos/druclimb/47310529/ • http://www.flickr.com/photos/miggslives/5351504116/ • http://www.flickr.com/photos/polkadotcreations/2480587587/ • http://www.flickr.com/photos/wien/418840561/ • http://www.flickr.com/photos/heartlover1717/2605609803/ • http://www.flickr.com/photos/sepehrehsani/5766453552/ • http://www.flickr.com/photos/47108884@N07/6949078701/ • http://www.flickr.com/photos/ricephotos/354939144/ • http://www.flickr.com/photos/toptechwriter/3069396941/ • http://www.flickr.com/photos/djnordic/167433120/ • http://www.flickr.com/photos/jpstanley/69523927/ • http://www.flickr.com/photos/lodigs/2833648828/ • http://www.flickr.com/photos/ppym1/387781444/ • http://www.flickr.com/photos/freefoto/3844247553/ • http://www.flickr.com/photos/31492524@N00/3801200094/ • http://www.flickr.com/photos/sararah/2119107500/ • http://www.flickr.com/photos/wlef70/7507679760/ • http://www.flickr.com/photos/wold/369244351/ • http://www.flickr.com/photos/ilri/7839428936/ • http://www.flickr.com/photos/dhwright/8012651441/ • http://www.flickr.com/photos/birminghammag/7979485144/ • http://www.flickr.com/photos/capcase/4970062870/ • http://www.flickr.com/photos/aidanwojtas/5879866927/

100

Stefano Maraspin @maraspin s.maraspin@mvassociati.it

Stefano Valle @stefanovalle s.valle@mvassociati.it