Lo scopo della presentazione è quella di fornire una visione a 360 gradi su come realizzare un'architettura MongoDB su un'infrastruttura Cloud Amazon Web Services.
La presentazione è suddivisa in quattro aree:
- Introduzione di base su MongoDB
- Preview delle caratteristiche di MongoDB 3
- Come organizzare architetture Replica Set e Sharding di MongoDB in VPC Cloud di Amazon Web Services
- Introduzione alle logiche di Schema Design di MongoDB
4. MongoDB è un database non relazione,
orientato ai documento, classificato come un
database NoSQL. MongoDB si allontana dalla
struttura tradizionale basata su tabelle dei
database relazionali in favore di documenti in
stile JSON con schema flessibile.
Cos’è MongoDB ?
6. Cos’è un documento per MongoDB?
{
“nome”: “Giorgio”,
“cognome”: “Rossi”,
“email”: “giorgio.rossi@gmail.com”,
“cell”: 3281432896,
“sport”: [“nuoto”, “calcio”]
}
MongoDB salva i documenti su disco in formato BSON (http://
bsonspec.org).
La dimensione massima di un documento BSON è 16MB.
Un documento è una struttura dati in stile JSON formata da
un numero variabile di coppie campo - valore
7. Agilità & Flessibilità
• Evoluzione semplice del modello di dati
• Adattamento e cambi rapidi sulla struttura dati
Rappresentazione dati intuitiva e naturale
• Sviluppatori sono più produttivi
• Le applicazioni risultano più semplici da gestire
Riduzione di operazioni di join e disk seek
• La programmazione è più semplice
• Maggiori performance
Benefici del modello a documenti
15. Riduzione del carico fino a
Distribuzione globale fino a
nodi Replica Set
Fino a
occupazione di spazio
di storage con la compressione
miglioramento generale
delle performance
3.0
95%
50
80%
7 - 10x
Nuovo storage engine
WiredTiger
16. MongoDB Query Language + Native Drivers
MongoDB Document Data Model
MMAP v1 WiredTiger Altri
Sicurezza
Management
Repository
data
IoT Sensori
e servizi
Servizi
di
Advertising
Analisi dati Archiviazione
Storage Engine
17. Perché WiredTiger è interessante
• Concorrenza a livello di documento
• Compressione
• Consistenza senza journaling
• Performance migliori in determinate condizioni
• Operazioni di scrittura pesante
• Scalabilità verticale
• Migliore utilizzo delle risorse hardware
• Più possibilità di fare tuning
18. Notevole ottimizzazione dello spazio di storage
• Migliore utilizzazione dello spazio di storage
• Alta scalabilità di I/O
• Più opzioni di compressione
• Snappy ( default )
• zlib
• None
• Dati e file Journal compressi su disco
• Indici compressi su disco e in memoria
25. Mongod:
Mongos:
Mongo:
E’ il processo server che esegue il database e che rende disponibile tutte i servizi
per la creazione di database, collections, l’inserimento di documenti e le relative
funzioni di interrogazione
E’ il servizio di routing per processare le query provenienti dallo strato applicativo e che
determina la locazione dei dati richiesti in una configurazione Sharding.
Rappresenta l’eseguibile per avviare la shell Javascript per interagire con database,
collezioni e documenti che possono essere interrogati e manipolati da riga di comando.
Terminologia
26. Pacchetti
Mongod-org:
Pacchetto principale che contiene tutte e quattro le componenti
MongoDB necessarie.
Mongod-org-Server:
Questo pacchetto contiene il demone Mongod ed i relativi
servizi e script di inizializzazione
Mongod-org-mongos: Contiene il pacchetto del demone Mongos
Mongod-org-shell: Contiene la shell mongo per il controllo del database
Mongod-org-tools:
Questo pacchetto contiene tutti gli strumenti di gestione del
database come mongoimport, mongoexport, mongodump etc
29. Avvia MongoDB
1
2
3
4
Import della public key usata dal gestore di pacchetti
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
Creare il “List File” per MongoDB
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-
org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
Aggiornare il gestore di pacchetti di Ubuntu
sudo apt-get update
Installare il pacchetto di MongoDB
sudo apt-get install mongodb-org
sudo apt-get install mongodb-org=2.6.8
33. Cosa significa automation?
Richiedere
le risorse in
AWS
Deploy di
qualsiasi versione
di mongodb
Inserimento
di repliche e
shard
Aggiornamento
della
configurazione in
ogni momento
Premere un
pulsante per
aggiornare
MongoDB
46. Come funziona la replica ?
oplog: contiene la lista di tutte le operazioni di scrittura e aggiornamenti fatti nel nodo primario
Primary
Secondary #1
Secondary #2
query per oplogs {$gt: 10}
query per oplogs {$gt: 7}
6 7 8 9 10 11 12 13
6 7 8 9 10
6 7
54. Elementi necessari per creare uno sharding
Mongod:
Mongos:
Mongo:
E’ il processo server che esegue il database e che rende disponibile tutte i servizi
per la creazione di database, collections, l’inserimento di documenti e le relative
funzioni di interrogazione
E’ il servizio di routing per processare le query provenienti dallo strato applicativo e che
determina la locazione dei dati richiesti in una configurazione Sharding.
Rappresenta l’eseguibile per avviare la shell Javascript per interagire con database,
collezioni e documenti che possono essere interrogati e manipolati da riga di comando.
Config Server:
Rappresenta i server contenenti i metadati relativi alle chiavi di sharding e alla
distribuzione delle informazioni.
55. Distribuzione dei dati
( Sharding )
Shard
Primary
Secondary
Secondary
Shard
orMongod
• E’ un nodo di un cluster
• Può essere un singolo mongod oppure un Replica Set
56. orNode 1
Secondary
Config
Server
Node 1
Secondary
Config
Server
Node 1
Secondary
Config
Server
Node 1
Secondary
Config
Server
Config Server
• Conserva il range di chunck e la loro localizzazione
• In un’architettura possono essere da 1 a 3 Nodi di server
Config
• Non possono essere configurati come Replica-Set
57. Mongos
• Funge da router / balancer
• Non ci sono dati presenti localmente (Informazioni utili sono conservati nel
configgi server)
• Un’architettura può essere composta da 1 o più Mongos
App Server App Server App Server App Server
Mongos Mongos Mongos
Oppure
58. Esempio architettura Sharding
App Server
Mongos
App Server
Mongos
App Server
Mongos
Config
Server
Config
Server
Config
Server
Shard 1 Shard 2 Shard 3
59. Sharding: Alta disponibilità Cross AZ
App Server
Mongos
App Server
Mongos
App Server
Mongos
Config
Server
Config
Server
Config
Server
Mongod
primary
Mongod
Secondary
Mongod
Secondary
Mongod
primary
Mongod
Secondary
Mongod
primary
Mongod
Secondary
Mongod
Secondary
Mongod
Secondary
AZ -1
AZ -2
Shard1 Shard2 Shard3
App Server
Mongos
60. Sharding: Alta disponibilità Cross Region
App Server
Mongos
App Server
Mongos
App Server
Mongos
Config
Server
Config
Server
Config
Server
Mongod
primary
Mongod
Secondary
Mongod
Secondary
Mongod
primary
Mongod
Secondary
Mongod
primary
Mongod
Secondary
Mongod
Secondary
Mongod
Secondary
Region 1
Shard1 Shard2 Shard3
App Server
Mongos
Region 2
62. • La chiave di Shard è immutabile
• I valori della chiave di Shard sono immutabile
• La chiave di Shard deve essere indicizzata
• La chiave di Shard è limitata ad una dimensione di 512 bytes
• La chiave di Shard è usata per definire il routing delle query
- Usare un campo usato nelle query
• Solamente la shard key può essere unica tra tutti gli shards
- `_id` è unico all’interno del singolo shard
Sharding Key
66. Divisione Chunk
• Un chunk viene suddiviso quando supera la dimensione massima
• Non ci sono punti di divisione se i documenti hanno la stessa
shared key
• Lo split di un chunk è un’operazione logica (nessun dato viene
spostato)
67. Balancing
• Il Balancer è eseguito all’interno di Mongos
• Quando la differenza tra lo shard più denso e la densità degli altri shard
supera la soglia di migrazione, il processo di bilanciamento viene avviato
68. Cleanup
• Lo shard sorgente cancella i dati
• Mongos rimuove il lock dal balancer dopo che l’operazione di
rimozione dei chunk è stata completata.
71. Snapshot Backup
EC2 EBS EBS Snapshot
Lo snapshot del volume EBS con journaling attivato è possibile
se e solo se il file di journal risiede nello stesso volume EBS dei dati MongoDB
db.runCommand({fsync:1,lock:1})
78. Relazionale vs Documents
Quali sono le differenze e perché?
Contact Address
Contact
• Name
• Company
• Title
• Phone
• Street
• City
• State
• Zip_code
• Name
• Company
• Title
• Address
• Street
• City
• State
• Zip_Code
• Phone
82. 1:1 Schema Design
Contact Twitter
Contact Twitter
Twitter_id
Contact_id
1 1
1 1
Contact
• Name
• Company
• Title
• Twitter
Twitter
Può ridurre le operazioni di reperimento dell’informazione?
83. Raccomandazioni:
• Tutte le informazioni del contatto reperibili con un’unica
operazione
• Contatto Twitter Embedded nel documento principale
• Relazione padre - figlio ( contenute )
• Non ci sono dati duplicati
• Sono possibili query e creazione di indici anche in campi
embedded
Casi eccezionali
• Valutare la decisione dell’embedding quando ci sono
grandi volumi di informazioni
Contact
• Name
• Company
• Title
• Twitter
Twitter
1:1 Schema Design
87. Raccomandazioni:
• Tutte le informazioni del contatto reperibili con un’unica
operazione
• Il documento “Contact” può contenere multipli numeri di
telefono
• Relazione padre - figlio ( contenute )
• Sono possibili query e creazione di indici anche in campi
embedded ( Esempio {“phone.type”: “Mobile”}
Casi eccezionali
• Valutare la decisione dell’embedding quando ci sono
grandi volumi di informazioni
ContactContact
• Name
• Company
• Title
• Phones
Phones
1:N Schema Design
92. Group Contact
Group Contact
contacts_id: [ ]
Contact_id
N N
N N
Group
• Contact
Contact N N
Contact
• Groups
Groups N
Informazioni ridondanti in entrambi i casi per
mantenere le relazioni
Entrambe le referenze richiedono di essere aggiornate
per mantenere la consistenza
Informazioni ridondanti in entrambi i casi per
mantenere le relazioni
Entrambe le referenze richiedono di essere aggiornate
per mantenere la consistenza
N:N Schema Design
93. Raccomandazioni:
• Dipende dai casi:
• Semplice Address Book
• Contatti referenziano ai gruppi
• Corporate e-mail Group
• Gruppi embeddano i contatti per performance
Casi eccezionali
• Attenzione al limite di 16MB di un documento
• La crescita del volume di dati può avere impatti sulle
performance e nell’organizzazione dei dati
Group
• Contact
Contact N
Contact
• Groups
Groups
N:N Schema Design
95. Elastic Map-Reduce
Veloce deploy ed esecuzione di
Hadoop su AWS
Supporta istanze Spot e Reserved
per ottimizzazione dei costi
Deploy su qualsiasi numero di nodi
del cluster Hadoop
Provision deployment su un numero
qualsiasi di nodi del cluster