NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

101
NoSQL Data Stores Introduzione alle basi di dati non relazionali DiTeDi, Udine - Italia 15-12-2012

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

Page 1: 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

Page 2: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Architettura Web ‘Classica’

Page 3: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Architettura Web ‘Classica’

Page 4: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

4

Page 5: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

5

Page 6: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

6

Page 7: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Termine Usurpato!

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

Page 8: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Concetti totalmente nuovi?!?

Page 9: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Concetti totalmente nuovi?!?

DBM

Page 10: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Le origini di Tokyo Cabinet

DBM

Page 11: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Chi conosce questo signore?

Page 12: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

E questo?

Page 13: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

E questo?

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

Page 14: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Eppure...

Page 15: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

PERCHÈ QUESTA HYPE?

Page 16: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

MOLTI PIÙ DATI

Page 17: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Big Data

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

Page 18: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

VARIABILITÀ DEI DATI

Page 19: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Progresso tecnologico

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

Costo 1MB DRAM

Page 20: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

CONNESSIONI

Page 21: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
Page 22: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

MOLTI PIÙ ACCESSI

Page 23: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
Page 24: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
Page 25: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Dynamo BigTable

Page 26: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Implementazione di Dynamo

Page 27: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 28: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Clustering

28

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

Page 29: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Persistenza Configurabile

29

N R W

numero nodi del cluster in cui replicare il dato

Page 30: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Replicazione

30

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

Page 31: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Persistenza Configurabile

31

N R W

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

Page 32: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Persistenza Configurabile

32

N R W

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

Page 33: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Coerenza eventuale

33

W + R <= N

Page 34: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Quorum

34

W + R > N

Page 35: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 36: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Implementazione di BigTable

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

Page 37: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Salvataggio dei dati

Page 38: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Salvataggio dei dati

Es. Data Location: Stefano Valle/Profilo:Paese

Page 39: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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)

Page 40: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

SCALABILITÀ ORIZZONTALE

Page 41: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
Page 42: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

ACID Atomic Consistent Isolated Durable

BASE Basic Available Soft State Eventually Consistent

Page 43: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Concentriamoci sull’Atomicità

43

Ordine

Oggetto 1

Oggetto 2

Cliente

Aggiornamento ordine

Page 44: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DA ENTITÀ RELAZIONI

Page 45: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

AD AGGREGATI

Page 46: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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€

Page 47: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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€

Page 48: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

COME SONO I DATI SU RDBMS?

Page 49: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

COME LI VORREMMO UTILIZZARE?

Page 50: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 51: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Impedence Mismatch

Page 52: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Impedence Mismatch

JOIN per evitare molteplici query

Page 53: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

}

]

}

Page 54: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

SCHEMALESS IS A LIE!

Page 55: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Da...

55

Dati

Room TV Pannello Controllo

Analisi Statistiche

Page 56: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

A...

56

Dati

API

Room TV Pannello Controllo

Analisi Statistiche

Page 57: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

O meglio...

57

Metadati

API

Dati hotel

API

Statistiche

API

Room TV Pannello Controllo

Analisi Statistiche

Page 58: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Domain Driven Design

58

Page 59: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

59

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

Page 60: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

60

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

+ CQRS

Page 61: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

POLYGLOT PERSISTANCE

Page 62: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Come scegliere?

Page 63: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

TRADEOFFS

Page 64: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

PERSISTENZA VS SPEED

Page 65: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DISPONIBILITÀ VS COERENZA

Page 66: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

TCO, CONOSCENZE INTERNE

Page 67: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

TEMPO, RISORSE, FATICA

Page 68: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

SOLIDITÀ

Page 69: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Hosting

69

Page 70: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

MODELLO DATI

Page 71: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 72: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

KEY/VALUE

Page 73: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Esempi

73

Page 74: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 75: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 76: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 77: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 78: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DOCUMENTALE

Page 79: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Esempi

79

Page 80: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 81: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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)

Page 82: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 83: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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#

Page 84: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

COLONNE

Page 85: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Esempi

85

Page 86: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

GRAFO

Page 87: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Flock

87

Esempi

Page 88: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

COSA PORTARE A CASA

Page 89: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

ONE SIZE DOES NOT FIT ALL

Page 90: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DATABASE RELAZIONALI

Page 91: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DATASTORE NOSQL

Page 92: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

GRAZIE

Page 93: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

DOMANDE?

Page 94: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

http://www.mvassociati.it/

Page 95: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

http://www.hubme.in/

Page 96: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Per Approfondire:

96

Page 97: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Per Approfondire:

97

Page 98: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Per Approfondire:

98

Page 99: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 100: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

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

Page 101: NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali

Stefano Maraspin @maraspin [email protected]

Stefano Valle @stefanovalle [email protected]