Date post: | 27-Jan-2015 |
Category: |
Software |
Upload: | stefano-maraspin |
View: | 136 times |
Download: | 1 times |
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