Post on 09-Dec-2014
description
transcript
Serie Application Development Back to Basics – Introduzione
Senior Solution Architect, MongoDB Inc,
@massimobrignoli
Massimo Brignoli
#MongoDBBasicsIT
Introduction
• Cos’è la Serie di Webinar
• Modello dei Dati
• Modello delle Query
• Scalabilità
• Affidabilità
• Architetture di Produzione
• Performance
• Prossima Puntata
Organizzazione della Serie
• Divisa in 2 sezioni– Sviluppo applicativo (4 parti)
• Schema Design• Interazione con il database con gli operatori di query
e update• Indicizzazione• Reportistica
– Operations (3 parti)• Messa in esercizio – scalabilità orizzontale e alta
affidabilità• Monitoring e performance tuning• Backup e recovery
Panoramica dell’Applicazione
• Content Management System– Utilizzerà:
• Operatori di Query & update• Aggregation Framework• Query Geografiche• Report pre-aggregati per analisi veloci• Documenti polimorfici• E molto altro …
• Take away framework
• Un approccio che potete riutilizzare nelle vostre applicazioni
Q & A
• Virtual Genius Bar
– Usate la chat per fare domande
– Il team italiano vi risponderà
– Sfruttatelo durante le sessioni!!!
MongoDB
Il mercato dei database
Modello dei dati a documento
Relazionale- Tabelle
{ first_name: ‘Paul’, surname: ‘Miller’, city: ‘London’, location: {
type: “Point”, coordinates :
[-0.128, 51.507]
}, cars: [ { model: ‘Bentley’, year: 1973, value: 100000, … }, { model: ‘Rolls Royce’, year: 1965, value: 330000, … } }}
Documentale - Collezioni
Agilità e flessibilità – Schema dinamico– I modelli dei dati possono evolvere facilmente– Le aziende possono adattarsi ai cambiamenti piû
velocemente
Naturale, Intuitiva Rappresentazione dei Dati– Elimina il problema dell’Object Relational Impedance
Mismatch– La maggior parte delle applicazioni sono dei candidati perfetti
Riduce la necessità di join e di disk seek– La programmazione è più semplice– E’ possibile scalare orizzontalmente mantenendo le
performance
Modello dei dati a documento
Sviluppo semplificato
Sviluppo semplificato
Ricca interazione con i dati
Modello delle Query
Shell
A linea di comando per interagire
direttamente con il database
Riga di comando e Drivers
DriversSono disponibili drivers per i più popolari linguaggi di programmazione
> db.collection.insert({company:“10gen”, product:“MongoDB”})> > db.collection.findOne(){
“_id” : ObjectId(“5106c1c2fc629bfe52792e86”),
“company” : “10gen”“product” : “MongoDB”
}
Java
Python
Perl
Ruby
Haskell
JavaScript
MongoDB è ricco di funzionalità
Queries
• Trovami tutte le auto di Gigi• Trovami chi a Milano ha
un’automobile costruita tra il 1970 e il 1980
Geospatial• Trovami tutti I proprietari di
automobili entro 5 km da piazza Duomo
Text Search• Trovami tutte le automobili con i
sedili in pelle nella descrizione.
Aggregation• Calcola il valore medio della
collezione di auto di Gigi
Map Reduce
• Com’è cambiata distribuzione dei colori delle proprietà di auto nelle varie aree geografiche nel tempo? Il colore viola sta diventando popolare in Lombardia?
{ first_name: ‘Gigi’, surname: ‘Rossi’, city: ‘Milano’, location: {
type: “Point”, coordinates :
[-0.128, 51.507]
}, cars: [ { model: ‘Bentley’, year: 1973, value: 100000, … }, { model: ‘Rolls Royce’, year: 1965, value: 330000, … } }}
Esempi di Query
Rich Queries
• Trovami tutte le auto di Gigi• Trovami chi a Milano ha
un’automobile costruita tra il 1970 e il 1980
db.cars.find({first_name: ‘Gigi’
})
db.cars.find({city: ‘Milano’, ”cars.year" : {
$gte : 1970, $lte : 1980
}})
{ first_name: ‘Gigi’, surname: ‘Rossi’, city: ‘Milano’, location: {
type: “Point”, coordinates :
[-0.128, 51.507]
}, cars: [ { model: ‘Bentley’, year: 1973, value: 100000, … }, { model: ‘Rolls Royce’, year: 1965, value: 330000, … } }}
Esempio di Query geografica
db.cars.find( { location:
{ $near : { $geometry : { type: 'Point' , coordinates :
[-0.128, 51.507] }
}, $maxDistance :5000 } } )
Geospatial• Trovami tutti I proprietari di
automobili entro 5 km da piazza Duomo
{ first_name: ‘Gigi’, surname: ‘Rossi’, city: ‘Milano’, location: {
type: “Point”, coordinates :
[-0.128, 51.507]
}, cars: [ { model: ‘Bentley’, year: 1973, value: 100000, … }, { model: ‘Rolls Royce’, year: 1965, value: 330000, … } }}
Esempio di Aggregazione
db.cars.aggregate( [
{$match : {"first_name" : ”Gigi"}}, {$project : {"first_name":1,"cars":1}},{$unwind : "$cars"},{ $group : {_id:"$first_name",
average : {
$avg : "$cars.value"}}} ])
{ "_id" : ”Gigi", "average" : 215000 }
Aggregation• Calcola il valore medio della
collezione di auto di Gigi
{ first_name: ‘Gigi’, surname: ‘Rossi’, city: ‘Milano’, location: {
type: “Point”, coordinates :
[-0.128, 51.507]
}, cars: [ { model: ‘Bentley’, year: 1973, value: 100000, … }, { model: ‘Rolls Royce’, year: 1965, value: 330000, … } }}
Scalabilità
Sharding Automatico
• Tre tipi di sharding: hash-based, range-based, tag-aware
• Aumentate o diminuite il numero di server a seconda delle vostre necessità
• Bilanciamento automatico dei dati
Query Routing
• Diversi modelli di ottimizzazione delle query
• Ogni opzione di sharding è appropriata per diversi tipi di applicazione
Disponibilità del Servizio
Alta Affidabilità– Assicura la disponibilità del servizio
durante vari tipologie di failure
Disaster Recovery – Indirizza la continuità del
business da un punto di vista di RTO (recovery time
objective) e RPO (recovery point objective).
Manutenzione– Effettua upgrade e altre operazioni di
manutenzione senza interruzione di servizio
Considerazioni sulla Disponibilità
Replica Set
• Replica Set – 2 o più copie
• “Self-healing” shard
• Indirizza svariate preoccupazioni:
- Alta disponibilità del servizio
- Disaster Recovery
- Manutenzione
Benefici di un Replica Set
Richieste del Business Benefici Replica Set
Alta Disponibilità Failover Automatico
Disaster Recovery Hot backups offsite
Manutenzione Rolling upgrades
Bassa Latenza Posiziona i dati vicino agli utenti
Workload Isolation Letture da repliche non primarie
Privacy dei Dati Restringe i dati ad una posizione fisica
Consistenza dei Dati Consistency Definibile
Performance
Miglior posizione dei
dati nello storage
Performance
In-Memory Caching
Aggiornamento sul posto
Il modello a documenti– Semplifica lo sviluppo applicativo– Semplifica la scalabilità orizzontale– Migliora le performance
MongoDB– Ricco database di utilizzo generale– Include Alta Disponibilità e Failover– Include la scalabilità orizzontale
Sommario
• Schema design for the CMS application– Collection– Decisioni
• Architettura applicativa– Esempi di tecnologie– Interfaccia RESTful– Python è stato scelto per gli esempi
• Esempi di codice
Seconda Puntata– 25 Marzo
#MongoDBBasicsIT