NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

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

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

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.