nosql, no worries: vecchi problemi, nuove soluzioni

111
NoSQL, No Worries Stefano Maraspin MV Associati Vecchi problemi, nuove soluzioni

Upload: stefano-maraspin

Post on 27-Jan-2015

105 views

Category:

Technology


0 download

DESCRIPTION

Slide del talk sulle basi di dati non relazionali (NoSQL) al Codemotion di Venezia del 17/11/2012. Presentato un caso di studio di architettura basata su CouchDB, MongoDB, Redis e OrientDB, oltre che diversi concetti relativi ai datastore NoSQL.

TRANSCRIPT

Page 1: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

NoSQL, No Worries

Stefano Maraspin

MV Associati

Vecchi problemi, nuove soluzioni

Page 2: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

@maraspin

Page 3: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

PARTIAMO DA UN CASE STUDY

Page 4: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

L’OBIETTIVO

Page 5: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Classico Stack LAMP/LAPP

Page 6: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 7: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

E SE?

Page 8: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DISTRIBUZIONE DATI, LOGICA

Page 9: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 10: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

VOGLIAMO ALTA DISPONIBILITÀ…

Page 11: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

…E COERENZA SUI DATI

Page 12: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Non potete avere tutto, ragazzi!

Prof. Eric Brewer http://www.cs.berkeley.edu/~brewer/

Page 13: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 14: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 15: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

F H

Page 16: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 17: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Non scordiamo neppure la latenza!

Page 18: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Consistency

Availability Partition Tolerance

Page 19: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Consistency

Availability Partition Tolerance

Categoria AP: DynamoDB CouchDB Cassandra MongoDB* Tokyo Cabinet Riak* Voldemort etc.

* Posizione configurabile

Categoria CP: BigTable Hbase MongoDB* Riak* Redis Memcached Scalaris etc.

Categoria CA: RDBMS

Page 20: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Consistency

Availability Partition Tolerance

Categoria AP: DynamoDB CouchDB Cassandra MongoDB* Tokyo Cabinet Riak* Voldemort etc.

* Posizione configurabile

Categoria CP: BigTable Hbase MongoDB* Riak* Redis Memcached Scalaris etc.

Categoria CA: RDBMS

Page 21: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cosa abbiamo considerato per la scelta? • Supporto multi-master configurabile • Facilità di sincronizzazione dati e

applicazione • Flessibilità del modello dati • Semplicità

Page 22: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Consistency

Availability Partition Tolerance

Categoria AP: DynamoDB CouchDB Cassandra MongoDB Tokyo Cabinet Riak Voldemort etc.

Categoria CP: BigTable Hbase MongoDB Riak Redis Memcached Scalaris etc.

Categoria CA: RDBMS

Page 23: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

“designed with the web in mind”

Page 24: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cos’è CouchDB? • Datastore che parla HTTP • Modello dati documentale (JSON) • Pensato per contesti distribuiti • Replicazione master-master • Può contenere intere applicazioni Web

lato client HTML/CSS/JS (couchapp)

Page 25: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 26: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 27: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

SVILUPPATORI

SERVER-SIDE

Page 28: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

RELAZIONI

METADATI

Page 29: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 30: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

0

2000

4000

6000

8000

10000

12000

14000

16000

DB Size (MB)

NB Quanto sopra su update!

Problema di spazio

Page 31: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

LA COMPATTAZIONE

Page 32: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Prestazioni durante la compattazione

• 350 evt/sec in inserimento • 3000 evt/sec se in batch mode • 100 evt/sec su update • 10 evt/sec durante compattazione

NB: dati forniti unicamente per dare ordini di grandezza. Test eseguiti su server entry level IBM x3550 M3, 1x3.60 GHz Xeon, 4GB RAM, Dischi SAS in RAID 0; CouchDB configurato con httpd max_connections = 2048, export ERL_MAX_PORTS=4096, export ERL_FLAGS="+A 4«, fsync

Page 33: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

ULTERIORE ESIGENZA

Page 34: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

RSS

Previsioni meteo

Video

Eventi

...

REST API Crawler

CDN

Page 35: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

RSS

Previsioni meteo

Video

Eventi

...

REST API Crawler

CDN

?

Page 36: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cosa ci serve? • Flessibilità del modello dati • Facilità di dialogo con PHP • Contesto non distribuito • Durevolezza non fondamentale • Prestazioni • Flessibilità di query

Page 37: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Perchè no CouchDB? • Flessibilità del modello dati • Facilità di dialogo con PHP • Contesto non distribuito • Durevolezza non fondamentale • Prestazioni • Flessibilità di query

Page 38: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

LE QUERY IN COUCHDB: MAP REDUCE

Page 39: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Quante visioni hanno avuto i film in totale?

Page 40: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

{

"_id": "39c7c57daddba704c2b04606de001373",

"info_type": "view",

"movie": "The Gladiator",

"views": 37

}

{

"_id": "39c7c57daddba704c2b04606de000a2f",

"info_type": "view",

"movie": "Spiderman",

"views": 10

}

{

"_id": "39c7c57daddba704c2b04606de000c92",

"info_type": "view",

"movie": "Shrek",

"views": 25

}

Page 41: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

Page 42: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

10 37 25

Page 43: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

10 37 25

47 25

Page 44: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

10 37 25

47 25

72

Page 45: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

4

5

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

10 37 25

47 25

72

MAP

Page 46: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

4

6

{

"movie": "Spiderman",

"views": 10

}

{

"movie": "The Gladiator",

"views": 37

}

{

"movie": "Shrek",

"views": 25

}

10 37 25

47 25

72

REDUCE

Page 47: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

function(doc) {

if (doc.info_type == 'view') {

emit(doc.movie, doc.views);

}

}

Map:

Reduce: function (key, values, rereduce) {

return sum(values);

}

{

"_id": "39c7c57...",

"info_type": "view",

"movie": "The Gladiator",

"views": 37

}

Page 48: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

function(doc) {

if (doc.info_type == 'view') {

emit(doc.movie, doc.views);

}

}

Map:

Reduce: function (key, values, rereduce) {

return sum(values);

}

{

"_id": "39c7c57...",

"info_type": "view",

"movie": "The Gladiator",

"views": 37

}

Il problema è qui!

Page 49: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

“Hu(mongo)us”

Page 50: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cos’è MongoDB: • Datastore Documentale (JSON) • Protocollo Binario • Update in place -> locks! • Flessibilità nelle query

Page 51: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Performance VS Data Safety

Le impostazioni predefinite (32bit e <v2.0) sono “rischiose” (no journal)

Page 52: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Replica Set

Page 53: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Failover

Page 54: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

A cosa fare attenzione?

• Nomi su database/collection: su errore, lui crea le entità specificate senza avvisare*

• Ordinamenti senza indici: raggiunto un certo quantitativo di dati non rallenta ma errore*

• Non farsi coinvolgere dalla flessibilità di query e cercare di costruirci sopra DB con relazioni

* esperienze con driver PHP

Page 55: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 56: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

TUTTO APPOSTO SIGNORE!

Page 57: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cosa ci serve per un sistema di monitoring?

• Performance • Semplicità • Expiration automatico dei valori • Gestione del cold start • Non è un problema la perdita di dati

-> Ok persistenza volatile, no replicazione

Page 58: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Perchè no CouchDB, MongoDB?

• Couch occupa troppo spazio, troppo lento • MongoDB non supportava TTL • Ci basta qualcosa di molto più semplice

Page 59: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

“Hey that’s Merz!”

Page 60: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Cos’è Redis?

• Key/Value++ • Protocollo Binario • Salva su RAM (snapshot su disco, evita

problema cold start) • Necessario avere abbastanza RAM

Page 61: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Dialogare con Redis

// Memorizzare un valore

> SET status ok

// Collezioni

> SADD luci_accese camera bagno

// Valore con scadenza prefissata

> SET status ok

> EXPIRE status 10 // in secondi

Page 62: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 63: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

COME STANNO ANDANDO LE COSE?

Page 64: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DI COSA PARLIAMO?

Page 65: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Simuliamo un’esperienza d’uso

Page 66: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Simuliamo un’esperienza d’uso

Page 67: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Simuliamo un’esperienza d’uso

Page 68: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Simuliamo un’esperienza d’uso

Page 69: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

G=(V,E)

Page 70: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Quali sono state le applicazioni più usate?

Page 71: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Database Relazionale

O(log N) O(log M) O(log N)

Page 72: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Grafo

O(1)

O(1)

Reperimento nodi adiacenti diretto, senza necessità di consultare un indice

Page 73: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

“Multiple datamodels support”

Page 74: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Modello Dati

Page 75: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Di cosa parliamo?

“Interrogazioni“ con Stack Tinkerpop o SQL+

Page 76: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 77: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 78: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 79: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

ACID Atomic Consistent Isolated Durable

BASE Basic Available Soft State Eventually Consistent

Page 80: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Quindi non ho atomicità?

Ordine

Oggetto 1 Oggetto 2

Cliente

Aggiornamento ordine

Page 81: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DATABASE RELAZIONALI

Page 82: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

NOSQL

Page 83: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

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 84: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

SCHEMALESS IS A LIE!

Page 85: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Dati

Room TV Pannello Controllo

Analisi Statistiche

Page 86: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Metadati

API

Dati hotel

API

Statistiche

API

Room TV Pannello Controllo

Analisi Statistiche

Page 87: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

POLYGLOT PERSISTANCE

Page 88: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni
Page 89: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

TRADEOFFS

Page 90: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

VELOCITÀ VS PERSISTENZA

Page 91: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DISPONIBILITÀ VS COERENZA

Page 92: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

SOLIDITÀ, AFFIDABILITÀ

Page 93: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

E IL MODELLO DATI?

Page 94: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Dimensioni

Complessità

Key Value

Colonne

Documentale

A grafo

> 90% dei casi d’uso

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

Page 95: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

KEY/VALUE

Page 96: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DOCUMENTALE

Page 97: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

GRAFO

Page 98: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

A COLONNA

Page 99: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

COSA PORTARE A CASA?

Page 100: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DATABASE RELAZIONALI

Page 101: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DATASTORE NOSQL

Page 102: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

GRAZIE

Page 103: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

DOMANDE?

Page 104: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Nome speaker

Mail speaker – company or community

http://www.hubme.in/

Eventi di rilievo nell’Information Technology

Page 105: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Nome speaker

Mail speaker – company or community

http://friuli.grusp.org/

Page 106: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Nome speaker

Mail speaker – company or community

http://www.mvassociati.it/

Serve aiuto con architetture NoSQL?

Page 107: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Per approfondire

Page 108: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Per approfondire

Page 109: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Per approfondire

Page 110: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Nome speaker

Mail speaker – company or community

http://www.flickr.com/photos/leandrociuffo/4128603357/

http://www.flickr.com/photos/uggboy/8043043095/

http://www.flickr.com/photos/47108884@N07/6949078701/

http://www.flickr.com/photos/22750018@N05/4268345597/

http://www.flickr.com/photos/latt/509790815/

http://www.flickr.com/photos/iita-media-library/4808291918/

http://www.flickr.com/photos/portofsandiego/7777282856/

http://www.flickr.com/photos/shareandenjoy/7074965023/

http://www.flickr.com/photos/miggslives/5351504116/

http://www.flickr.com/photos/jabb/6956142046/

http://www.flickr.com/photos/mr_g_travels/863720665/

http://www.flickr.com/photos/polkadotcreations/2480587587/

http://www.flickr.com/photos/ppym1/387781444/

http://www.flickr.com/photos/ephotion/171928602/

http://www.flickr.com/photos/sepehrehsani/5766453552/

http://www.flickr.com/photos/jpstanley/69523927/

http://www.flickr.com/photos/lodigs/2833648828/

http://www.flickr.com/photos/freefoto/3844247553/

http://www.flickr.com/photos/ilri/7839428936/

http://www.flickr.com/photos/maugiart/5014963068/

http://www.flickr.com/photos/toptechwriter/3069396941/

http://www.flickr.com/photos/31492524@N00/3801200094/

http://www.flickr.com/photos/iita-media-library/5762064624/

http://www.flickr.com/photos/gewitterhexer/5540504147/

http://www.flickr.com/photos/djnordic/167433120/

http://www.flickr.com/photos/aidanwojtas/5879866927/

http://www.flickr.com/photos/dhwright/8012651441/

http://www.flickr.com/photos/capcase/4970062870/

http://www.flickr.com/photos/birminghammag/7979485144/

Photo Credits:

Page 111: NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

Nome speaker

Mail speaker – company or community

Il know how utilizzato per la preparazione di questa presentazione è stato in buona parte acquisito durante lo sviluppo del sistema Hotel OnAir di concezione e proprietà di VDA Multimedia Spa, cui il case study di cui si è fatto accenno fa riferimento. Ringrazio il team leader del progetto, Stefano Brenelli, e tutto il team di sviluppo, per l'interessante, edificante e proficua collaborazione. In particolare ringrazio: Carlo Anselmi, Maurizio Battistella, Manuel Bitto, Nicola Busanello, Antonino Murador, Antonio Parrella, Nicola Pressi, Stefano Valle, Riccardo Zamuner, Michele Zanon, Tiziano Zonta. Ringrazio anche i colleghi Diego Drigani e Dario Tion, nonchè tutto il PUG Friuli per i sempre utili confronti e consigli.