SlideShare ist ein Scribd-Unternehmen logo
1 von 111
Downloaden Sie, um offline zu lesen
NoSQL, No Worries   Vecchi problemi, nuove soluzioni




Stefano Maraspin

MV Associati
@maraspin
PARTIAMO DA UN CASE STUDY
L’OBIETTIVO
Classico Stack LAMP/LAPP
E SE?
DISTRIBUZIONE DATI, LOGICA
VOGLIAMO ALTA DISPONIBILITÀ…
…E COERENZA SUI DATI
Non potete avere tutto, ragazzi!




                Prof. Eric Brewer
       http://www.cs.berkeley.edu/~brewer/
H   F
Non scordiamo neppure la latenza!
Consistency




Partition
                          Availability
Tolerance
Categoria CP:
     BigTable
     Hbase                                                    Categoria CA:
     MongoDB*                                                 RDBMS
     Riak*
     Redis                       Consistency
     Memcached
     Scalaris
     etc.



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




                         * Posizione configurabile
Categoria CP:
     BigTable
     Hbase                                                    Categoria CA:
     MongoDB*                                                 RDBMS
     Riak*
     Redis                       Consistency
     Memcached
     Scalaris
     etc.



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




                         * Posizione configurabile
Cosa abbiamo considerato per la scelta?
• Supporto multi-master configurabile
• Facilità di sincronizzazione dati e
  applicazione
• Flessibilità del modello dati
• Semplicità
Categoria CP:
     BigTable
     Hbase                                                     Categoria CA:
     MongoDB                                                   RDBMS
     Riak
     Redis                        Consistency
     Memcached
     Scalaris
     etc.



Categoria AP:
DynamoDB
CouchDB
Cassandra             Partition                 Availability
MongoDB              Tolerance
Tokyo Cabinet
Riak
Voldemort
etc.
“designed with the web in mind”
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)
SVILUPPATORI

SERVER-SIDE
RELAZIONI

METADATI
Problema di spazio
16000
              DB Size (MB)
14000


12000


10000


8000


6000


4000


2000


   0




          NB Quanto sopra su update!
LA COMPATTAZIONE
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
ULTERIORE ESIGENZA
RSS

      REST             Previsioni
             Crawler
       API              meteo

                         Video

                        Eventi

                          ...

CDN
RSS

      REST             Previsioni
             Crawler
       API              meteo

                         Video

                        Eventi

             ?            ...

CDN
Cosa ci serve?
•   Flessibilità del modello dati
•   Facilità di dialogo con PHP
•   Contesto non distribuito
•   Durevolezza non fondamentale
•   Prestazioni
•   Flessibilità di query
Perchè no CouchDB?
•   Flessibilità del modello dati
•   Facilità di dialogo con PHP
•   Contesto non distribuito
•   Durevolezza non fondamentale
•   Prestazioni
•   Flessibilità di query
LE QUERY IN COUCHDB: MAP REDUCE
Quante visioni hanno
avuto i film in totale?
{
    "_id": "39c7c57daddba704c2b04606de000a2f",
    "info_type": "view",
    "movie": "Spiderman",
    "views": 10
}


{
    "_id": "39c7c57daddba704c2b04606de001373",
    "info_type": "view",
    "movie": "The Gladiator",
    "views": 37
}


{
    "_id": "39c7c57daddba704c2b04606de000c92",
    "info_type": "view",
    "movie": "Shrek",
    "views": 25
}
{                           {                               {
    "movie": "Spiderman",       "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                 "views": 37                     "views": 25
}                           }                               }
{                           {                               {
    "movie": "Spiderman",       "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                 "views": 37                     "views": 25
}                           }                               }




             10                            37                            25
{                            {                               {
    "movie": "Spiderman",        "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                  "views": 37                     "views": 25
}                            }                               }




             10                             37                            25

                            47                                            25
{                            {                               {
    "movie": "Spiderman",        "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                  "views": 37                     "views": 25
}                            }                               }




             10                             37                            25

                            47                                            25

                                                   72
{                            {                               {
    "movie": "Spiderman",        "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                  "views": 37                     "views": 25
}                            }                               }




             10                             37                            25
MAP
                            47                                            25

                                                   72

4
{                            {                               {
    "movie": "Spiderman",        "movie": "The Gladiator",       "movie": "Shrek",
    "views": 10                  "views": 37                     "views": 25
}                            }                               }




             10                             37                            25

REDUCE
                            47                                            25

                                                   72

4
Map:
function(doc) {
  if (doc.info_type == 'view') {
     emit(doc.movie, doc.views);
  }
}                          {
                             "_id": "39c7c57...",
                             "info_type": "view",
                             "movie": "The Gladiator",
                             "views": 37
                         }

Reduce:
function (key, values, rereduce) {
    return sum(values);
}
Map:                          Il problema è qui!
function(doc) {
  if (doc.info_type == 'view') {
     emit(doc.movie, doc.views);
  }
}                          {
                                  "_id": "39c7c57...",
                                  "info_type": "view",
                                  "movie": "The Gladiator",
                                  "views": 37
                              }

Reduce:
function (key, values, rereduce) {
    return sum(values);
}
“Hu(mongo)us”
Cos’è MongoDB:
•   Datastore Documentale (JSON)
•   Protocollo Binario
•   Update in place -> locks!
•   Flessibilità nelle query
Performance VS Data Safety




Le impostazioni predefinite sono “rischiose” (fsync ogni minuto).
Consigliata la replicazione per “stare tranquilli” e avere alta disponibilità.
Replica Set
Failover
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
TUTTO APPOSTO SIGNORE!
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
Perchè no CouchDB, MongoDB?

• Couch occupa troppo spazio, troppo lento
• MongoDB non supportava TTL
• Ci basta qualcosa di molto più semplice
“Hey that’s Merz!”
Cos’è Redis?

• Key/Value++
• Protocollo Binario
• Salva su RAM (snapshot su disco, evita
  problema cold start)
• Necessario avere abbastanza RAM
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
COME STANNO ANDANDO LE COSE?
DI COSA PARLIAMO?
Simuliamo un’esperienza d’uso
Simuliamo un’esperienza d’uso
Simuliamo un’esperienza d’uso
Simuliamo un’esperienza d’uso
G=(V,E)
Quali sono state le
applicazioni più usate?
Database Relazionale




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


              O(1)


                                 O(1)




Reperimento nodi adiacenti diretto, senza necessità di consultare un indice
“Multiple datamodels support”
Modello Dati
Di cosa parliamo?




        “Interrogazioni“ con Stack Tinkerpop o   SQL+
ACID         BASE
Atomic       Basic
Consistent   Available
Isolated     Soft State
Durable      Eventually Consistent
Quindi non ho atomicità?
                     Aggiornamento ordine


Ordine

         Oggetto 1
            Oggetto 2

                        Cliente
DATABASE RELAZIONALI
NOSQL
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€
SCHEMALESS IS A LIE!
Pannello      Analisi
Room TV
          Controllo   Statistiche




             Dati
Pannello       Analisi
Room TV
            Controllo    Statistiche




   API         API           API




 Metadati   Dati hotel    Statistiche
POLYGLOT PERSISTANCE
TRADEOFFS
VELOCITÀ VS PERSISTENZA
DISPONIBILITÀ VS COERENZA
SOLIDITÀ, AFFIDABILITÀ
E IL MODELLO DATI?
Dimensioni



        Key Value

                               Colonne

                                                 Documentale

                                                                                   A grafo




        > 90% dei casi d’uso

                                                                                  Complessità

         Tratto da: http://www.slideshare.net/emileifrem/an-overview-of-nosql-jfokus-2011
KEY/VALUE
DOCUMENTALE
GRAFO
A COLONNA
COSA PORTARE A CASA?
DATABASE RELAZIONALI
DATASTORE NOSQL
GRAZIE
DOMANDE?
Eventi di rilievo nell’Information Technology




           http://www.hubme.in/




                                                       Nome speaker
                                 Mail speaker – company or community
http://friuli.grusp.org/




                                                 Nome speaker
                           Mail speaker – company or community
Serve aiuto con architetture NoSQL?




    http://www.mvassociati.it/




                                                 Nome speaker
                           Mail speaker – company or community
Per approfondire
Per approfondire
Per approfondire
http://www.flickr.com/photos/leandrociuffo/4128603357/
                 http://www.flickr.com/photos/uggboy/8043043095/

Photo Credits:   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/

                                                      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.


                                                                         Nome speaker
                                                   Mail speaker – company or community

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (14)

Microsoft PowerPivot & Power View in Excel 2013
Microsoft PowerPivot & Power View in Excel 2013Microsoft PowerPivot & Power View in Excel 2013
Microsoft PowerPivot & Power View in Excel 2013
 
What is Power BI
What is Power BIWhat is Power BI
What is Power BI
 
Power BI Overview
Power BI OverviewPower BI Overview
Power BI Overview
 
Power BI Create lightning fast dashboard with power bi & Its Components
Power BI Create lightning fast dashboard with power bi & Its Components Power BI Create lightning fast dashboard with power bi & Its Components
Power BI Create lightning fast dashboard with power bi & Its Components
 
Design for Humans - Tech Vision 2017 Trend 4
Design for Humans - Tech Vision 2017 Trend 4Design for Humans - Tech Vision 2017 Trend 4
Design for Humans - Tech Vision 2017 Trend 4
 
Power BI
Power BIPower BI
Power BI
 
The Uncharted - Tech Vision 2017 Trend 5
The Uncharted - Tech Vision 2017 Trend 5The Uncharted - Tech Vision 2017 Trend 5
The Uncharted - Tech Vision 2017 Trend 5
 
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&ALearn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
Learn Power BI with Power Pivot, Power Query, Power View, Power Map and Q&A
 
Microsoft Power BI Overview
Microsoft Power BI OverviewMicrosoft Power BI Overview
Microsoft Power BI Overview
 
Top 10 Cloud Trends for 2017
Top 10 Cloud Trends for 2017Top 10 Cloud Trends for 2017
Top 10 Cloud Trends for 2017
 
Power BI Made Simple
Power BI Made SimplePower BI Made Simple
Power BI Made Simple
 
State of Digital Transformation 2016. Altimeter Report
State of Digital Transformation 2016. Altimeter ReportState of Digital Transformation 2016. Altimeter Report
State of Digital Transformation 2016. Altimeter Report
 
Ecosystem Power Plays - Tech Vision 2017 Trend 2
Ecosystem Power Plays - Tech Vision 2017 Trend 2Ecosystem Power Plays - Tech Vision 2017 Trend 2
Ecosystem Power Plays - Tech Vision 2017 Trend 2
 
Introduction to Microsoft Power BI
Introduction to Microsoft Power BIIntroduction to Microsoft Power BI
Introduction to Microsoft Power BI
 

Mehr von Steve Maraspin

Mehr von Steve Maraspin (20)

Architetture a Microservizi (con Kubernetes)
Architetture a Microservizi (con Kubernetes)Architetture a Microservizi (con Kubernetes)
Architetture a Microservizi (con Kubernetes)
 
How Agile changed Software Development
How Agile changed Software DevelopmentHow Agile changed Software Development
How Agile changed Software Development
 
Principi di Interaction Design
Principi di Interaction DesignPrincipi di Interaction Design
Principi di Interaction Design
 
Customer Journey Mapping Workshop
Customer Journey Mapping WorkshopCustomer Journey Mapping Workshop
Customer Journey Mapping Workshop
 
A (really) Quick Introduction to Event Storming
A (really) Quick Introduction to Event StormingA (really) Quick Introduction to Event Storming
A (really) Quick Introduction to Event Storming
 
Meet a parallel, asynchronous PHP world
Meet a parallel, asynchronous PHP worldMeet a parallel, asynchronous PHP world
Meet a parallel, asynchronous PHP world
 
Don't Make Me Think - There's no need (2014)
Don't Make Me Think - There's no need (2014)Don't Make Me Think - There's no need (2014)
Don't Make Me Think - There's no need (2014)
 
The Metaphor Fallacy (in Digital Product Development)
The Metaphor Fallacy (in Digital Product Development)The Metaphor Fallacy (in Digital Product Development)
The Metaphor Fallacy (in Digital Product Development)
 
Lean UX: Sviluppo Software Agile e Incentrato sull'Utente
Lean UX: Sviluppo Software Agile e Incentrato sull'UtenteLean UX: Sviluppo Software Agile e Incentrato sull'Utente
Lean UX: Sviluppo Software Agile e Incentrato sull'Utente
 
La filosofia Lean nello sviluppo di prodotti digitali
La filosofia Lean nello sviluppo di prodotti digitaliLa filosofia Lean nello sviluppo di prodotti digitali
La filosofia Lean nello sviluppo di prodotti digitali
 
Error Reporting in ZF2: form messages, custom error pages, logging
Error Reporting in ZF2: form messages, custom error pages, loggingError Reporting in ZF2: form messages, custom error pages, logging
Error Reporting in ZF2: form messages, custom error pages, logging
 
Outcome not Output: A Story of Lean UX Adoption
Outcome not Output: A Story of Lean UX AdoptionOutcome not Output: A Story of Lean UX Adoption
Outcome not Output: A Story of Lean UX Adoption
 
Don't Make me Think - There's no Need
Don't Make me Think - There's no NeedDon't Make me Think - There's no Need
Don't Make me Think - There's no Need
 
ZF2 Modular Architecture - Taking advantage of it
ZF2 Modular Architecture - Taking advantage of itZF2 Modular Architecture - Taking advantage of it
ZF2 Modular Architecture - Taking advantage of it
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
 
NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
NoSQL Data Stores: Introduzione alle Basi di Dati Non RelazionaliNoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
NoSQL Data Stores: Introduzione alle Basi di Dati Non Relazionali
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
Permettere al cliente di apprezzare l'approccio agile
Permettere al cliente di apprezzare l'approccio agilePermettere al cliente di apprezzare l'approccio agile
Permettere al cliente di apprezzare l'approccio agile
 
Let customers appreciate the agile workflow
Let customers appreciate the agile workflowLet customers appreciate the agile workflow
Let customers appreciate the agile workflow
 
Esempio di architettura distribuita basata su PHP, CouchDB e Mobile
Esempio di architettura distribuita basata su PHP, CouchDB e MobileEsempio di architettura distribuita basata su PHP, CouchDB e Mobile
Esempio di architettura distribuita basata su PHP, CouchDB e Mobile
 

NoSQL, No Worries: Vecchi Problemi, Nuove Soluzioni

  • 1. NoSQL, No Worries Vecchi problemi, nuove soluzioni Stefano Maraspin MV Associati
  • 3. PARTIAMO DA UN CASE STUDY
  • 6.
  • 9.
  • 12. Non potete avere tutto, ragazzi! Prof. Eric Brewer http://www.cs.berkeley.edu/~brewer/
  • 13.
  • 14.
  • 15. H F
  • 16.
  • 17. Non scordiamo neppure la latenza!
  • 18. Consistency Partition Availability Tolerance
  • 19. Categoria CP: BigTable Hbase Categoria CA: MongoDB* RDBMS Riak* Redis Consistency Memcached Scalaris etc. Categoria AP: DynamoDB CouchDB Partition Cassandra Availability MongoDB* Tolerance Tokyo Cabinet Riak* Voldemort etc. * Posizione configurabile
  • 20. Categoria CP: BigTable Hbase Categoria CA: MongoDB* RDBMS Riak* Redis Consistency Memcached Scalaris etc. Categoria AP: DynamoDB CouchDB Partition Cassandra Availability MongoDB* Tolerance Tokyo Cabinet Riak* Voldemort etc. * Posizione configurabile
  • 21. Cosa abbiamo considerato per la scelta? • Supporto multi-master configurabile • Facilità di sincronizzazione dati e applicazione • Flessibilità del modello dati • Semplicità
  • 22. Categoria CP: BigTable Hbase Categoria CA: MongoDB RDBMS Riak Redis Consistency Memcached Scalaris etc. Categoria AP: DynamoDB CouchDB Cassandra Partition Availability MongoDB Tolerance Tokyo Cabinet Riak Voldemort etc.
  • 23. “designed with the web in mind”
  • 24. 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)
  • 25.
  • 26.
  • 29.
  • 30. Problema di spazio 16000 DB Size (MB) 14000 12000 10000 8000 6000 4000 2000 0 NB Quanto sopra su update!
  • 32. 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
  • 34. RSS REST Previsioni Crawler API meteo Video Eventi ... CDN
  • 35. RSS REST Previsioni Crawler API meteo Video Eventi ? ... CDN
  • 36. Cosa ci serve? • Flessibilità del modello dati • Facilità di dialogo con PHP • Contesto non distribuito • Durevolezza non fondamentale • Prestazioni • Flessibilità di query
  • 37. Perchè no CouchDB? • Flessibilità del modello dati • Facilità di dialogo con PHP • Contesto non distribuito • Durevolezza non fondamentale • Prestazioni • Flessibilità di query
  • 38. LE QUERY IN COUCHDB: MAP REDUCE
  • 39. Quante visioni hanno avuto i film in totale?
  • 40. { "_id": "39c7c57daddba704c2b04606de000a2f", "info_type": "view", "movie": "Spiderman", "views": 10 } { "_id": "39c7c57daddba704c2b04606de001373", "info_type": "view", "movie": "The Gladiator", "views": 37 } { "_id": "39c7c57daddba704c2b04606de000c92", "info_type": "view", "movie": "Shrek", "views": 25 }
  • 41. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } }
  • 42. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } } 10 37 25
  • 43. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } } 10 37 25 47 25
  • 44. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } } 10 37 25 47 25 72
  • 45. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } } 10 37 25 MAP 47 25 72 4
  • 46. { { { "movie": "Spiderman", "movie": "The Gladiator", "movie": "Shrek", "views": 10 "views": 37 "views": 25 } } } 10 37 25 REDUCE 47 25 72 4
  • 47. Map: function(doc) { if (doc.info_type == 'view') { emit(doc.movie, doc.views); } } { "_id": "39c7c57...", "info_type": "view", "movie": "The Gladiator", "views": 37 } Reduce: function (key, values, rereduce) { return sum(values); }
  • 48. Map: Il problema è qui! function(doc) { if (doc.info_type == 'view') { emit(doc.movie, doc.views); } } { "_id": "39c7c57...", "info_type": "view", "movie": "The Gladiator", "views": 37 } Reduce: function (key, values, rereduce) { return sum(values); }
  • 50. Cos’è MongoDB: • Datastore Documentale (JSON) • Protocollo Binario • Update in place -> locks! • Flessibilità nelle query
  • 51. Performance VS Data Safety Le impostazioni predefinite sono “rischiose” (fsync ogni minuto). Consigliata la replicazione per “stare tranquilli” e avere alta disponibilità.
  • 54. 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
  • 55.
  • 57. 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
  • 58. Perchè no CouchDB, MongoDB? • Couch occupa troppo spazio, troppo lento • MongoDB non supportava TTL • Ci basta qualcosa di molto più semplice
  • 60. Cos’è Redis? • Key/Value++ • Protocollo Binario • Salva su RAM (snapshot su disco, evita problema cold start) • Necessario avere abbastanza RAM
  • 61. 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
  • 62.
  • 70. Quali sono state le applicazioni più usate?
  • 71. Database Relazionale O(log N) O(log M) O(log N)
  • 72. Grafo O(1) O(1) Reperimento nodi adiacenti diretto, senza necessità di consultare un indice
  • 75. Di cosa parliamo? “Interrogazioni“ con Stack Tinkerpop o SQL+
  • 76.
  • 77.
  • 78.
  • 79. ACID BASE Atomic Basic Consistent Available Isolated Soft State Durable Eventually Consistent
  • 80. Quindi non ho atomicità? Aggiornamento ordine Ordine Oggetto 1 Oggetto 2 Cliente
  • 82. NOSQL
  • 83. 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€
  • 85. Pannello Analisi Room TV Controllo Statistiche Dati
  • 86. Pannello Analisi Room TV Controllo Statistiche API API API Metadati Dati hotel Statistiche
  • 88.
  • 93. E IL MODELLO DATI?
  • 94. Dimensioni Key Value Colonne Documentale A grafo > 90% dei casi d’uso Complessità Tratto da: http://www.slideshare.net/emileifrem/an-overview-of-nosql-jfokus-2011
  • 97. GRAFO
  • 99. COSA PORTARE A CASA?
  • 102. GRAZIE
  • 104. Eventi di rilievo nell’Information Technology http://www.hubme.in/ Nome speaker Mail speaker – company or community
  • 105. http://friuli.grusp.org/ Nome speaker Mail speaker – company or community
  • 106. Serve aiuto con architetture NoSQL? http://www.mvassociati.it/ Nome speaker Mail speaker – company or community
  • 110. http://www.flickr.com/photos/leandrociuffo/4128603357/ http://www.flickr.com/photos/uggboy/8043043095/ Photo Credits: 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/ Nome speaker Mail speaker – company or community
  • 111. 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. Nome speaker Mail speaker – company or community