lunedì, gennaio 26, 2015

MongoDB un motore di basi dati senza schema!

Prima domanda da porsi: cosa è mongodb?

Mongodb è un dbms (database management system) orientato ai documenti, dove per documenti si intendono informazioni strutturate in formato json.

Mongodb è una base dati nosql: non esiste il concetto di schema (regole sulla struttura dei dati) e dunque non esiste il concetto di tabella, si ha la massima libertà nel memorizzare i propri dati senza vincoli di struttura e, men che meno, di integrità referenziale

In mongodb non esistono le tabelle, ma esistono le collezioni: contenitori di documenti che non impongono vincoli sulla struttura dei dati in essi contenuti.

Installiamo ora mongodb sulla nostra macchina: procuriamoci il pacchetto d'installazione opportuno all'indirizzo https://www.mongodb.org/downloads ed eseguiamolo, scegliendo le impostazioni standard.

Mongodb, se non diversamente specificato durante il suo avvio, si aspetta di memorizzare i dati nella cartella /data/db; se siete utenti di windows create la cartella c:/data/db con una shell eseguita con i diritti di amministratore (tasto WIN + r  e poi  CTRL + SHIFT  + ENTER).

Il programma d'installazione dovrebbe aggiornare la variabile di ambiente PATH, aggiungendo un percorso del tipo C:\Program Files\MongoDB 2.6 Standard\bin; in modo da poter eseguire il server ed il client da qualsiasi percorso in cui vi troviate.

Siamo pronti ad avviare il server: aprite una finestra dos tasto WIN + r  e poi  CTRL + SHIFT  + ENTER) e digitate mongod: il server partirà, di default, sulla porta 27017 e rimarrà in attesa di richiesta di connessioni.


Se volessimo utilizzare un altro percorso dove memorizzare i dati e/o un'altra porta, dovremmo, ad esempio, digitare il comando mongod --dbpath "d:\test\mongo db data" --port 28000

Apriamo adesso un'altra shell dos (tasto WIN + r  e poi  CTRL + SHIFT  + ENTER) ed eseguiamo il programma client tramite il comando mongo: il client proverà a connettersi, di default, ad un server presente su localhost e su porta 27017.


In figura possiamo notare a sinistra, la shell che ci permetterà di eseguire comandi da mandare al server; a destra notiamo il server che ha accettato una connessione.

Per spegnere il server basterà digitate CTRL + c dalla rispettiva shell.

Di default, il client si connette ad una base di dati chiamata test, per cambiare base dati di riferimento di utlizza il comando use nomedb: se la base dati nomedb non esiste, verrà creata successivamente quando salveremo in essa un nuovo documento in una nuova collezione.

Creiamo ora una base dati per la memorizzazione dei libri della nostra biblioteca.
  1. Creiamo la base dati con use biblioteca
  2. Memorizziamo il primo libro, nella collezione libri, con l'istruzione
    db.libri.insert({titolo: 'La guerra', codiceisbn: 'AEDRFFF', autore: 'Boh!'})
  3. Memorizziamo un ulteriore libro con
    db.libri.insert({titolo: 'Pace', codiceisbn: 'ZEDRR', autore: 'Riboh!'})
Il server creerà la base dati biblioteca e la collezioni libri contenente i due documenti (libri), rappresentati in formato json.
  • Per vedere la lista delle basi di dati gestite dal nostro server, digitatiamo show dbs.
  • Per sapere qual è la base dati corrente, digitiamo db
  • Per cambiare base dati corrente, digitiamo use nomebasedati
  • Per vedere la lista delle collezione della base dati corrente, digitiamo show collections
  • Per visualizzare i documenti della collezione libri, digitiamo db.libri.find()
Tutti i documenti inseriti in mongodb, devono avere una proprietà _id univoca: se non la si specifica in fase di inserimento, mongodb genererà automoticamente tale proprietà garantendone l'univocità.

Per concludere vediamo un esempio di estrazione: vogliamo tutte le informazioni relative al libro che ha codiceisbn = 'ZEDRR':

  • db.libri.find({codiceisbn:'ZEDRR'})
Nel prossimo post, cercheremo di creare una base dati raggiungibile dalla nostra applicazione installata su heroku: spero sia ovvio che non potremo utlilizzare la nostra macchina per ospitare la base dati :).

Alla prox.
Ivan

Nessun commento:

Posta un commento