Corso di Basi di Dati Introduzione a MongoDB Home page del corso:

Slides:



Advertisements
Presentazioni simili
Modulo 5 DataBase ACCESS.
Advertisements

DBMS (DataBase Management System)
SQL applicato a SQL Server
Estendere i linguaggi: i tipi di dato astratti
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
PHP.
Connessione con MySQL.
Biglietti e Ritardi: schema E/R
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Access: Query semplici
Basi di dati Università Degli Studi Parthenope di Napoli
SQL: Lezione 7 Nataliya Rassadko
Esercitazione.
Daniel Stoilov Tesi di Laurea
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Corso di PHP.
In questa lezione Introduzione La query di selezione
DBMS ( Database Management System)
Basi di dati Claudia Raibulet
Manipolazione dei dati
Implementare un modello di dati
Basi di Dati e Sistemi Informativi
Realizzato da Roberto Savino
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
OBIETTIVI: Introduzione ai driver ODBC Creazione di alcune tabelle del database Creazione query Creazione report Lezione del 13/11/2009 Bray Francesco.
DATABASE Introduzione
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Microsoft Access Query (II), filtri.
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Accesso a basi di dati con ASP.
Modulo 5 DataBase ACCESS. Informazioni e Dati INFORMAZIONI vengono scambiate con linguaggio scritto o parlato DATI rappresentazione di informazioni in.
Pagine ASP parte 3 I data base Stefano Schacherl.
Progettazione Logica Il prodotto della progettazione logica è uno schema logico che rappresenta le informazioni contenute nello schema E-R in modo corretto.
Introduzione a Javascript
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
IV D Mercurio DB Lezione 2
Microsoft Access Query (III).
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
MySQL Database Management System
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Approfondimenti SQL.
Introduzione ai Database NoSQL
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Gaetano Anastasi Beatrice Miotti Lorenzo Guerriero Monica Pellegrinelli Massimiliano Sartor Giorgio Macauda SQLite Esempi di utilizzo della libreria in.
Access Breve introduzione. Componenti E’ possibile utilizzare Access per gestire tutte le informazioni in un unico file. In un file di database di Access.
Modulo 5 – Database ACCESS LICEO SCIENTIFICO “ B. RESCIGNO COMPUTER SCUOLA PIANO INTEGRATO 2008/09 ESPERTO prof.ssa Rita Montella.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
ASP – Active Server Pages - 1 -Giuseppe Tandoi ASP – Active Server Pages Tecnologia per lo sviluppo di pagine dinamiche.
Introduzione a MongoDB
Transcript della presentazione:

Corso di Basi di Dati Introduzione a MongoDB Home page del corso:

Introduzione ai database NoSQL Il termine NoSQL identifica una moltitudine di DBMS, basati su modelli logici differenti:  Database chiave/valore  Database document-oriented  Database column-oriented  Database graph-oriented

Introduzione ai database NoSQL  Esempi: MongoDB, CouchDB  Gestione di dati eterogeneei e complessi (semi- strutturati)  Scalabili orizzontalmente, supporto per partizionamento ( sharding ) dei dati in sistemi distribuiti  Documenti  coppie chiave/valore (JSON)  Forniscono funzionalità per aggregazione/analisi dei dati (MapReduce)

Introduzione ai database NoSQL  MongoDB (  Top DBMS non relazionale, open source dal 2009  Customer: Source: Source:

Introduzione ai database NoSQL  MongoDB (  Database organizzato in collezioni ; le collezioni contengono liste di documenti. Ogni documento è un insieme di campi. MongoDBModello Relazionale Collezione Tabella Documento Riga Campo Colonna di una riga

Introduzione ai database NoSQL  MongoDB (  Inserimento comandi JavaScript tramite shell o driver immersi in linguaggio ospite (Java).  Utilizzo linguaggio JSON come input/output delle query di aggiornamento o selezione.  Utilizzo linguaggio BSON (codifica binaria di JSON) per rappresentare i documenti internamente.

Introduzione ai database NoSQL  Avvio del server e della shell mongod //demone in ascolto sulla porta mongo //shell client  Creazione di una collezione (vuota)  Utilizzo/Creazione di un DB use provaDB db.createCollection(“circoli”);

Introduzione ai database NoSQL  Comandi della shell di MongoDB ComandoAzione show dbs Mostra DB disponibili show collections Mostra le collezioni del db show users Mostra gli utenti del sistema show rules Mostra il sistema di accessi show logs Mostra i log disponibili

Introduzione ai database NoSQL  Formato per lo scambio di dati tra applicazioni.  Documenti JSON facilmente interpretabili da macchine; molti parser disponibili.  I dati di un documento sono racchiusi tra {}.  I dati assumono la forma  nome : valore { nome: “mario” } { nome: “mario”, cognome: “rossi} JSON

Introduzione ai database NoSQL  Valore  Numero, intero o reale { nome: “mario”, eta: 15, punti:13.45}  Valore  Stringa, tra apici { nome: “mario”, cognome: “rossi”}  Valore  Booleano, true o false { nome: “mario”, impiegato: true}  Valore  Array, tra parentesi quadre { nome: “mario”, cap: [“134”,”042”]}  Valore  Oggetto, tra parentesi graffe { nome: “mario”, indirizzo: {citta:bologna, via: po, numero:3} }

Introduzione ai database NoSQL { nome: “Mario”, cognome: “Rossi”, eta: 45, impiegato: false, salario: , telefono: [“ ”, “ ”], ufficio: [ {nome: “A”, via: Zamboni, numero: 7}, {nome: “B”, via: Irnerio, numero: 49}] } Esempio

Introduzione ai database NoSQL  Documento in MongoDB  oggetto JSON ! {campo1: valore1, campo2: valore2, campo3:[valore1, …, valoreN]} {name: ‘Marco’, cognome: ‘Rossi’, eta: 22, data:new Date(1997,6,2,12,30)} {name: ‘Marco’, cognome: ‘Rossi’, eta: 22, domicilio:[‘Roma’, ‘Bologna’]}

Introduzione ai database NoSQL  Nella stessa collezione, è possibile inserire documenti con strutture campo/valore differenti. Marco Massimo Maria /5/1990 Rossi Bianchi COLLEZIONE ANAGRAFICA DOC1 DOC2 DOC3  Non è possibile rappresentare strutture simili nel modello relazionale, a meno di usare valori NULL!

Introduzione ai database NoSQL  Inserimento di un documento in una collezione: db.NOMECOLLEZIONE.insert(DOCUMENTO) db.anagrafica.insert({name: ”Marco”, cognome: “Rossi”, eta: 22}) db.anagrafica.insert({cognome: “Rossi”, eta: 22, domicilio:[“Roma”, “Bologna”]}) db.anagrafica.insert({name: “Maria”, eta: 25})

Introduzione ai database NoSQL  Ogni documento contiene un campo _id, che corrisponde alla chiave primaria della collezione.  Il campo _id può essere definito esplicitamente, o viene aggiunto in maniera implicita da MongoDB. db.anagrafica.insert({_id: 1, name: ‘Marco’, cognome: ‘Rossi’, eta: 22}) db.anagrafica.insert({name: ‘Marco’, cognome: ‘Rossi’, ruolo:’Manager’}) ID ESPLICITO ID IMPLICITO

Introduzione ai database NoSQL  Rimozione di documenti da una collezione db.NOMECOLLEZIONE.remove({})  Svuota la collezione, eliminando tutti gli elementi. db.anagrafica.remove({})  DELETE FROM anagrafica db.NOMECOLLEZIONE.remove(SELETTORE)  Eliminando dalla collezione tutti i documenti che fanno matching con il selettore !

Introduzione ai database NoSQL  SELETTORE  Documento JSON {campo1: valore1, campo2:valore2, …} {name:”Marco”, cognome:”Rossi”} {$or[{campo1: valore1},{campo2:valore2}]} {$or[{name:”Marco”},{cognome:”Rossi”}] {campo1: valore1, campo2:{$OP:VALORE/I}} {name:‘Marco’, eta:{$gt:30}} $gt, $lt, $gte, $lte, $ne, $in

Introduzione ai database NoSQL  Aggiornamento di documento in una collezione: db.NOMECOLLEZIONE.update(SELETTORE,CAMPI) db.NOMECOLLEZIONE.update(SELETTORE,{$SET: CAMPI}) db.NOMECOLLEZIONE.update(SELETTORE,{$PUSH :CAMPI}) db.anagrafica.update({name:’Mario’},{eta: 45})  Sostituisce il documento relativo all’impiegato Mario, con la coppia nome/età!

Introduzione ai database NoSQL  Aggiornamento di documento in una collezione: db.NOMECOLLEZIONE.update(SELETTORE,CAMPI) db.NOMECOLLEZIONE.update(SELETTORE,{$SET: CAMPI}) db.NOMECOLLEZIONE.update(SELETTORE,{$PUSH :CAMPI}) db.anagrafica.update({name:’Mario’},{$set :{eta:45}})  Nel documento relativo all’impiegato Mario, setta l’età pari a 45.

Introduzione ai database NoSQL  Aggiornamento di documento in una collezione: db.NOMECOLLEZIONE.update(SELETTORE,CAMPI) db.NOMECOLLEZIONE.update(SELETTORE,{$SET: CAMPI}) db.NOMECOLLEZIONE.update(SELETTORE,{$PUSH :CAMPI}) db.anagrafica.update({name:’Mario’},{$pus h:{eta:45}})  Nel documento relativo all’impiegato Mario, aggiunge il campo età.

Introduzione ai database NoSQL  Il costrutto di find consente di definire delle operazioni di ricerca ( query ) su una collezione.  db.nomeCollezione.find()  restituisce tutti i documenti presenti nella collezione.  db.nomeCollezione.find(SELETTORE)  restituisce tutti i documenti, i cui campi rispettino la condizione espressa nella query.  db.nomeCollezione.find(SELETTORE,PROJECTION)  restistuisce tutti i campi projection dei documenti, i cui campi rispettino la condizione espressa nella query

Introduzione ai database NoSQL  Esempi del costrutto di find  db.anagrafica.find()  SELECT * FROM anagrafica  db.anagrafica.find({nome:’Mario’, eta:30})  SELECT * FROM anagrafica WHERE ((Nome=‘Mario’) AND (ETA=30)) AND  db.anagrafica.find({nome:’Mario},{eta: 1})  SELECT _ID,ETA FROM anagrafica WHERE ((Nome=‘Mario’) Campo selezionato

Introduzione ai database NoSQL  Esempi del costrutto di find db.anagrafica.find({$or:[{nome:”Mario”}, {eta:56}]},{eta:1}]) SELECT _ID, ETA FROM anagrafica WHERE ((Nome=Mario) OR (ETA=56)) db.anagrafica.find({eta:{$gte:60}}) SELECT * FROM ANAGRAFICA WHERE (ETA >=60)

Introduzione ai database NoSQL  Operatori di ordinamento sulla find  db.nomeCollezione.find(…).sort(CAMPO/CAMPI)  db.anagrafica.find({name:’Mario’}).sort({eta:1 }) SELECT * FROM anagrafica WHERE (Name=“Mario”) ORDER BY ETA; 1=Ordinamento crescente, -1=Ordinamento decrescente

Introduzione ai database NoSQL  Operatori di conteggio sulla find  db.nomeCollezione.find(…).count()  db.anagrafica.find({name:’Mario’}).count() SELECT COUNT(*) FROM anagrafica WHERE (Name=“Mario”)

Introduzione ai database NoSQL  Operatori di filtro duplicati sulla find  db.nomeCollezione.distinct([CAMPO],SELETTORE)  db.anagrafica.distinct(“eta”,{name:”Mario”}) SELECT DISTINCT(eta) FROM anagrafica WHERE (Name=“Mario”)

Introduzione ai database NoSQL  Operatori di aggregazione: funzione aggregate  Consente di implementare una pipeline di operazioni da eseguire sulla base di dati.  Ad ogni passo della pipeline, vengono eseguite operazioni che prendono in input dei documenti JSON e producono in output documenti JSON. COLLEZIONE OPERATORE1 OPERATORE2 RISULTATO DOC

Introduzione ai database NoSQL  Operatori della pipeline di aggregazione :  $geonear  ordina i documenti dal più lontano al più vicino rispetto ad una posizione data  $match  seleziona solo alcuni documenti che soddisfano le condizioni fornite in input  $project  seleziona i campi prescelti  $ group  raggruppa in base ad uno o più campi  $ limit  seleziona i primi n documenti del JSON  $ sort  ordina il JSON in base ad alcuni campi  $out  scrive l’output su una collezione

Introduzione ai database NoSQL  Operatori di aggregazione: funzione aggregate  db.nomeCollezione.aggregate([OPERATORE1, OPERATORE2, …, OPERATOREN])  db.anagrafica.aggregate([ {$match:’A’}, {$group: {_id:”$customId”, total:{$sum: “$amount”}} ])

Introduzione ai database NoSQL  Operatori di aggregazione: map-and-reduce QUERY phase  seleziona solo i documenti che fanno matching con il selettore. MAP phase  mappa i documenti selezionati in un insieme di coppie chiave/valore. REDUCE phase  condensa i documenti le cui chiavi dispongono di più valori.

Introduzione ai database NoSQL  Operatori di aggregazione: map-and-reduce

Introduzione ai database NoSQL  E’ possibile raccogliere i comandi mongoDB in uno script ( linguaggio JavaScript ) mongodb myfile.js  La prima istruzione dello script contiene la connessione al server MongoDB, ed al database su cui si vuole operare: conn = new Mongo(); db = conn.getDB("tennis");

Introduzione ai database NoSQL  Il file di script può contenere costrutti iterativi e/o di selezione : while(condizione) { LISTACOMANDI} if(condizione) { LISTACOMANDI } else { LISTACOMANDI }  I cursori vengono usati per scorrere il risultato di una query. cursor = db.collection.find(…); while ( cursor.hasNext() ) { printjson( cursor.next() ); }

Introduzione ai database NoSQL conn = new Mongo(); db = conn.getDB("tennis2"); db.createCollection("soci"); cursor = db.collection.find({name=“mario”}); while (cursor.hasNext()) { printjson(cursor.next()); } cursor = db.collection.find({name=“mario”}); if (cursor.hasNext()) { print(“Trovato!”); } MYSCRIPT.js

Introduzione ai database NoSQL  Supponiamo di dover rappresentare correlazioni tra collezioni in MongoDB. Es. Circoli Tennis e Soci dei Circoli  MongoDB (come tutti i sistemi NoSQL) non mette a disposizione i costrutti di vincoli di integrità referenziale tra collezioni/tabelle.  MongoDB (come tutti i sistemi NoSQL) non supporta il join tra collezioni!

Introduzione ai database NoSQL  Le correlazioni possono essere espresse mediante campi _id replicati tra più collezioni… db.circoli.insert({_id:ObjectId(‘120’), name:‘Nettuno’}) db.soci.insert({name:’Mario’, cognome: ‘Rossi’, circolo:ObjectId(‘120’)})

Introduzione ai database NoSQL  Le associazioni uno-a-molti, o molti-a-molti, tra documenti di diverse collezioni possono essere rappresentate sfruttando il fatto che in MongoDB il valore di un campo può essere anche un array, o una struttura complessa (es. documento annidato). db.soci.insert({name:’Mario’, cognome: ‘Rossi’, circolo:[ObjectId(‘120’), ObjectId(‘150’) ObjectId(‘200’)})

Introduzione ai database NoSQL  Problema: come scrivere la query che restituisce nome e cognome dei soci che partecipano a circoli situati a Bologna, senza usare il JOIN ?  Soluzione: usare 2 query! db.circoli.find({luogo:’Bologna’},{}) >> {_id:’432’} db.soci.find({circolo:’432’},{nome:1, cognome:1})

Introduzione ai database NoSQL  Sharding  Processo di suddivisione dei dati su un cluster di server MongoDB (database distribuito). Perché distribuire i dati?  Maggior storage  Maggiore capacità computazionale  Ridondanza dei dati  Disponibilità del servizio  …

Introduzione ai database NoSQL  Q. Come effettuare la suddivisione dei dati?  Necessità di definire una shard key.  La chiave deve essere presente su tutti i documenti di una collezione !  In base al valore della chiave, si suddivide la collezione in segmenti ( chunks ).  Gruppi di chunk vengono assegnati ai diversi nodi del cluster.... Come effettuare l’allocazione?

Introduzione ai database NoSQL (SOLUZIONE1) RANGE-BASED SHARDING  Individua valore massimo e minimo della chiave  Ogni chunk corrisponde ad un intervallo [K-i,K+i]

Introduzione ai database NoSQL (SOLUZIONE2) HASH-BASED SHARDING  MongoDB applica la funzione hash(#chunk)  Il risultato della funzione determina il server.

Introduzione ai database NoSQL  Ottimizzazioni a run-time: Splitting  Se un chunk cresce troppo in dimensione, esso viene splittato in più parti.  L’operazione viene eseguita su un server, e non comprende la migrazione del chunk stesso.

Introduzione ai database NoSQL  Ottimizzazioni a run-time: Balancing  Il Balancer viene eseguito in background e tiene traccia del numero di chunk gestito da ciascun server.  In caso di allocazione non bilanciata, il Balancer provvede a migrare i chunk tra server differenti (dal più carico al più scarico).