• Save
MongoDB User Group Padova - Overviews iniziale su MongoDB
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

MongoDB User Group Padova - Overviews iniziale su MongoDB

on

  • 430 views

MongoDB è un database non relazionale, orientato ai documenti. Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database ...

MongoDB è un database non relazionale, orientato ai documenti. Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database relazionali in favore di documenti in stile JSON con schema dinamico (MongoDB chiama il formato BSON), rendendo l'integrazione di dati di alcuni tipi di applicazioni più facile e veloce.

Lo scopo del MongoDB User Group Padova è quello di condividere esperienze sulla tecnologia MongoDB.

Questa presentazione, usata durante il primo evento dello User Group, è stata usata per introdurre i partecipanti sulle procedure di installazione ed i concetti di base su MongoDB.

Statistics

Views

Total Views
430
Views on SlideShare
429
Embed Views
1

Actions

Likes
3
Downloads
0
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

MongoDB User Group Padova - Overviews iniziale su MongoDB Presentation Transcript

  • 1. Stefano Dindo @stefanodindo
  • 2. 7,000,000+ MongoDB Downloads 150,000+ Online Education Registrants 25,000+ MongoDB User Group Members 25,000+ MongoDB Days Attendees 20,000+ MongoDB Management Service (MMS) Users
  • 3. General Purpose Document Database Open Source MongoDB
  • 4. Valore di MongoDB Strumento per l’innovazione di nuove app Migliore esperienza utente Time to market più veloce Riduzione del TCO
  • 5. { ! _id: ‘Objectid(“4b2b9…”)’,! first_name: ‘Paul’,! surname: ‘Miller’,! city: ‘London’,! location: [45.123,47.232],! cars: [ ! { model: ‘Bentley’,! year: 1973,! value: 100000, … },! { model: ‘Rolls Royce’,! year: 1965,! value: 330000, … }! ]! }! MongoDB: Modello a Documenti
  • 6. 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
  • 7. Better data locality Caching In-Place Updates Performance
  • 8. Installazione e primo database
  • 9. Terminologia SQL - Like Corrispettivo in MongoDB Database Database Tabella Collections Riga Documents Colonna Field
  • 10. Document { ! _id: ‘Objectid(“4b2b9…”)’,! first_name: ‘Paul’,! surname: ‘Miller’,! city: ‘London’,! location: [45.123,47.232],! cars: [ ! { model: ‘Bentley’,! year: 1973,! value: 100000, … },! { model: ‘Rolls Royce’,! year: 1965,! value: 330000, … }! ]! }! Esempio Tipi di dati Null Boolean Number String Date Array Embedded documents { x: null } { x: true } { x: 3.14 } { x: 3 } { x: “zero12” } { x: new Date() } { x: [“a”,”b”, “c”] } { x: {y: “a” } }
  • 11. Object id 0 1 2 3 4 5 6 7 8 9 10 11 Timestamp Machine PID Increment
  • 12. Terminologia 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.
  • 13. 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://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.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.4.3
  • 14. Semplici comandi per gestire MongoDB sudo service mongod start sudo chkconfig mongod on sudo service mongod stop 1 2 3 dopo l’avvio del server mongoDB verificare lo stato di avvio consultando il log ! ! /var/log/mongodb/mongod.log
  • 15. MongoDB progettato per il Cloud AWS Marketplace fornisce delle AMI con MongoDB già configurato
  • 16. Perchè questo?
  • 17. Principali Comandi: use <nome db> show collections db.<nomeCollection>.insert({…}) db.<nomeCollection>.findOne() db.<nomeCollection>.update(<criterio>, {…}) db.<nomeCollection>.remove(<criterio>, {…})
  • 18. Tips & Tricks
  • 19. mongorc.js 1 Eseguire Javascript direttamente in shell 2 mongorc.js : per l’esecuzione di script all’avvio della shell
  • 20. Query
  • 21. find({…}) db.<nomeCollection>.find({<criterio>},{return key}) { ! custom_id: “A123”,! amount: 300,! status: “D”! }! productsold db.productsold.find({status: “D”}) { ! custom_id: “A123”,! amount: 500,! status: “A”! }! { ! custom_id: “A123”,! amount: 250,! status: “A”! }! { ! custom_id: “B212”,! amount: 200,! status: “A”! }! { ! custom_id: “A123”,! amount: 300,! status: “D”! }!
  • 22. find({…}) db.<nomeCollection>.find({<criterio>},{return key}) { ! custom_id: “A123”,! amount: 300! }! productsold db.productsold.find({status: “D”}, 
 {customer_id: 1, amount: 1,_id: 0 }) { ! custom_id: “A123”,! amount: 500,! status: “A”! }! { ! custom_id: “A123”,! amount: 250,! status: “A”! }! { ! custom_id: “B212”,! amount: 200,! status: “A”! }! { ! custom_id: “A123”,! amount: 300,! status: “D”! }!
  • 23. Alcuni operatori per query condizionali $lt: < $lte: <= $gt: > $gte: >= $or { ! custom_id: “A123”,! amount: 500,! status: “A”! }! { ! custom_id: “A123”,! amount: 250,! status: “A”! }! { ! custom_id: “B212”,! amount: 200,! status: “A”! }! { ! custom_id: “A123”,! amount: 300,! status: “D”! }! db.productsold.find(
 {amount: {“$gte”: 200,“$lte”: 250 }}) { ! custom_id: “A123”,! amount: 250,! status: “A”! }! { ! custom_id: “B212”,! amount: 200,! status: “A”! }! productsold
  • 24. Query su embedded document { ! _id: ‘Objectid(“c75r4bb6…”)’,! name: {
 ! ! first: ‘Stefano’! !! last: ‘Dindo’},! age: 30! }! db.user.find({name: {first: “Stefano”, last: “Dindo”}}) db.user.find({name.first: “Stefano”, name.last: “Dindo”}) oppure
  • 25. Alta affidabilità e ridondanza dei dati
  • 26. • Quanto punti di failure vuoi avere? • Quanti sonni tranquilli vuoi dormire? • Mai avuto problemi di connettività? • Più nodi facilitano l’uso dei dati in modo diverso Perchè replica dei dati
  • 27. Replica Set
  • 28. Nodo 1 Nodo 2 Nodo 3 Creazione ReplicaSet
  • 29. Codice configurazione ReplicaSet - 1 di 2 1 Definire il nome del ReplicaSet 2 Avviare mongodb con l’opzione ReplicaSet nel 1° nodo 3 Avviare mongodb con l’opzione ReplicaSet nel 2° nodo 4 Avviare mongodb con l’opzione ReplicaSet nel 3° nodo $mongod --replSet zero12rs -f mongod.conf --fork $mongod --replSet zero12rs -f mongod.conf --fork $mongod --replSet zero12rs -f mongod.conf --fork 4 Eseguire la configurazione effettiva dei nodi replicaSet
  • 30. > conf = { _id : "zero12rs”, members : [ {_id : 0, host : "A”}, {_id : 1, host : "B"}, {_id : 2, host : "C”}, ] } ! > rs.initiate(conf) Codice configurazione ReplicaSet - 2 di 2
  • 31. Nodo 1 Secondary Nodo 2 Secondary Nodo 3 Primary Heartbeat Replica Replica ReplicaSet - 1 di 3
  • 32. Nodo 1 Secondary Nodo 2 Secondary Nodo 3 Primary Elezione primary XFAIL ! ReplicaSet - 2 di 3
  • 33. Nodo 1 Primary Nodo 2 Secondary Nodo 3 Primary Heartbeat XFAIL ! Replica ReplicaSet - 3 di 3
  • 34. Nodo 1 Primary Nodo 2 Secondary Nodo 3 Primary Heartbeat XFAIL ! Replica ReplicaSet - 3 di 3
  • 35. Come funziona la replica
  • 36. Come funziona la replica ? oplog: contiene la lista di tutte le operazioni di scrittura e aggiornamenti fatti nel nodo primario 6 7 8 9 10 11 12 13 6 7 8 9 10 6 7 Primary Secondary #1 Secondary #2 query per oplogs {$gt: 10} query per oplogs {$gt: 7}
  • 37. Sviluppare con replicaSet
  • 38. Secondary Secondary Primary Client Application Driver Write Read ReplicaSet per gli sviluppatori
  • 39. Secondary Secondary Primary Client Application Driver Write Read Read ReplicaSet per gli sviluppatori
  • 40. • Network acknowledgement • Wait for error • Wait for journal sync • Wait for replication Write Concern Write concern è una configurazione del client usata per definire quanto sicuro deve essere la scrittura prima che l’applicazione possa continuare le proprie attività. Write Concern acknowledged unacknowledged Non funziona tramite shell Possibile tramite librerie programm
  • 41. write Driver Primary apply in memory Write Concern: unaknoledged
  • 42. getLastError Driver Primary apply in memory Write Concern: aknoledged ( in attesa di errori)
  • 43. Driver Primary write to journal apply in memory getLastError write j:true Write Concern: journal Sync
  • 44. Driver Primary Secondary getLastError write w:2 replicate apply in memory Write Concern: attesa per la replica
  • 45. Tagging • Controllare dove i dati vengono scritti e/o letti • Ogni membro del RS può avere uno o più TAG • tags: {dc: “ny”} • tags: {dc: “ny”, rack: “zero12rack”} • Permette di definire le regole di Write Concerns • E’ possibile cambiare le politiche senza modificare il codice
  • 46. { _id : "zero12rs", members : [ {_id : 0, host : "A", tags : {"dc": "ny"}}, {_id : 1, host : "B", tags : {"dc": "ny"}}, {_id : 2, host : "C", tags : {"dc": "sf"}}, {_id : 3, host : "D", tags : {"dc": "sf"}}, {_id : 4, host : "E", tags : {"dc": "cloud"}}], settings : { getLastErrorModes : { allDCs : {"dc" : 3}, someDCs : {"dc" : 2}} } } > db.blogs.insert({...}) > db.runCommand({getLastError : 1, w : "someDCs"}) Esempio di Tagging
  • 47. Driver Primary (SF) Secondary (NY) getLastError write W:allDCs Secondary (Cloud) replicate replicate apply in memory Esempio di Tagging
  • 48. Slave Delay > conf = { _id : "mySet”, members : [ {_id : 0, host : "A”}, {_id : 1, host : "B"}, {_id : 2, host : "C”}, {_id : 3, host : "D", hidden : true}, {_id : 4, host : "E", hidden : true, slaveDelay : 3600} ] } ! > rs.initiate(conf) !
  • 49. • Solamente il Primary ( conf. di default ) • Preferenza per il primario • Solamente i secondari • Preferenza ai secondari • Il più vicino Modalità di lettura da ReplicaSet
  • 50. breve introduzione allo Sharding
  • 51. 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
  • 52. Node 1 Secondary Config Server Node 1 Secondary Config Server Node 1 Secondary Config Server Shard Shard Shard Mongos App Server Mongos App Server Mongos App Server Esempio architettura Sharding
  • 53. Scalabilità • Aumento della capacità nel momento di necessità ! • Distribuzione delle soluzioni su cloud, on-premises o miste ! • Aumento delle performance semplice
  • 54. replicaSet e i #TAG
  • 55. Distribuzione Globale Primary:NYC Secondary:NYC Primary:LON Primary:SYD Secondary:LON Secondary:NYC Secondary:SYD Secondary:LON Secondary:SYD
  • 56. MongoDB Management Service
  • 57. MongoDB Management Service
  • 58. Monitoraggio Collections & Reporting
  • 59. Feed Attività
  • 60. Monitoraggio risorse hardware
  • 61. Monitoraggio database
  • 62. 1. Creare un account su mms.mongodb.com 2. Installare agent sui singoli nodi del database 3. Aggiungere gli hosts 4. Opzionale: aggiungere il monitoraggio risorse hardware in ogni singolo nodo 5. Opzionale: abilitare funzioni di jogging e profilazione ! Info: mms.mongodb.com/help/monitoring/install/ Setup
  • 63. Perchè usarlo?
  • 64. Trovare i colli di bottiglia
  • 65. Cosa significa fare Tuning ? • Identificare il problema e stabilire il comportamento accettabile • Misurare le performance di componenti concorrenti • Trovare il collo di bottiglia • Rimuovere il collo di bottiglia • Testare nuovamente e confermare le performance
  • 66. - Uso della memoria - Opcounters - Lock % - Queues - Background flush average - Replication stats Metriche consigliate da controllare
  • 67. Esempio utilità monitorare opscount ~1500 ops per minuto (opcounters) 0.1 MB per oggetto ( dimensione media ) ! ~1500 ops/min / 60 secondi * 0.1 MB/op * 8b/B 
 
 =~ 20 mbps banda richiesta
  • 68. Stefano Dindo @stefanodindoGRAZIE !!!