![Page 1: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/1.jpg)
Serie Application Development Back to Basics – Introduzione
Senior Solution Architect, MongoDB Inc,
@massimobrignoli
Massimo Brignoli
#MongoDBBasicsIT
![Page 2: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/2.jpg)
Introduction
• Cos’è la Serie di Webinar
• Modello dei Dati
• Modello delle Query
• Scalabilità
• Affidabilità
• Architetture di Produzione
• Performance
• Prossima Puntata
![Page 3: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/3.jpg)
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
![Page 4: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/4.jpg)
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
![Page 5: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/5.jpg)
Q & A
• Virtual Genius Bar
– Usate la chat per fare domande
– Il team italiano vi risponderà
– Sfruttatelo durante le sessioni!!!
![Page 6: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/6.jpg)
MongoDB
![Page 7: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/7.jpg)
Il mercato dei database
![Page 8: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/8.jpg)
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
![Page 9: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/9.jpg)
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
![Page 10: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/10.jpg)
Sviluppo semplificato
![Page 11: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/11.jpg)
Sviluppo semplificato
![Page 12: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/12.jpg)
Ricca interazione con i dati
![Page 13: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/13.jpg)
Modello delle Query
![Page 14: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/14.jpg)
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
![Page 15: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/15.jpg)
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, … } }}
![Page 16: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/16.jpg)
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, … } }}
![Page 17: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/17.jpg)
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, … } }}
![Page 18: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/18.jpg)
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, … } }}
![Page 19: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/19.jpg)
Scalabilità
![Page 20: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/20.jpg)
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
![Page 21: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/21.jpg)
Query Routing
• Diversi modelli di ottimizzazione delle query
• Ogni opzione di sharding è appropriata per diversi tipi di applicazione
![Page 22: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/22.jpg)
Disponibilità del Servizio
![Page 23: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/23.jpg)
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à
![Page 24: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/24.jpg)
Replica Set
• Replica Set – 2 o più copie
• “Self-healing” shard
• Indirizza svariate preoccupazioni:
- Alta disponibilità del servizio
- Disaster Recovery
- Manutenzione
![Page 25: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/25.jpg)
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
![Page 26: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/26.jpg)
Performance
![Page 27: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/27.jpg)
Miglior posizione dei
dati nello storage
Performance
In-Memory Caching
Aggiornamento sul posto
![Page 28: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/28.jpg)
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
![Page 29: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/29.jpg)
• 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
![Page 30: Webinar Back to Basics - Sessione 1 - introduzione](https://reader038.vdocuments.us/reader038/viewer/2022110117/55422c0ab4c9058e5d8b45e0/html5/thumbnails/30.jpg)
#MongoDBBasicsIT