Introduzione ai database

Come abbiamo visto gli anni precedenti, in qualsiasi sistema di elaborazione trattiamo, sia esso hardware, software o una combinazione dei due, possiamo sempre individuare due componenti distinti con ruoli differenti:

  1. conservazione dei dati
  2. manipolazione dei dati

Nell'arco dei precedenti due anni, abbiamo trattato diversi casi. Di seguito una tabella che li riassume, insieme a quello che andremo a trattare in particolare quest'anno, il web.

HardwareSistema OperativoApplicazioneWeb
DatiRAM/Hard Diskfiles, databasestrutture datidatabase server
ManipolazioneCPUprocessi, applicazionifunzioniapplication server, clients

DBMS

Al cuore di ogni azienda, ci sono i dati che l'azienda tratta e che sono sempre una parte fondamentale del loro business. Questi dati possono riguardare i clienti dell'azienda, i propri prodotti, i fornitori o tutte queste cose insieme. Tutti questi dati formano il sistema informativo dell'azienda.

Da molti anni ormai questi dati sono trattati da un sistema informatico, che permette di poterli scrivere, leggere, analizzare, in generale manipolare in modo molto veloce. L'insieme dei dati di per sé viene chiamato database (abbreviato DB). Per trattare in modo efficiente, efficace e sicuro i DB sono nati dei software specifici dedicati alla gestione di questi dati, che vengono chiamati quindi Database Management System (DBMS).

Il DBMS fa da ponte tra i dati, che fisicamente vengono salvati in un supporto persistente (tipicamente dei file su un hard-disk) e l'utente.

Il DBMS che useremo in queste lezioni si chiama MariaDB, è completamente open source e mantenuto dalla MariaDB foundation. MariaDB è un fork di MySQL ed i comandi sono perfettamente compatibili con MySQL.

Da Wikipedia: MariaDB è nato nel 2009 come fork di MySQL. L'ideatore e responsabile del progetto è Michael "Monty" Widenius, il programmatore finlandese che ha iniziato e guidato per molti anni MySQL. Quando, all'inizio del 2008, la Sun Microsystems ha acquistato MySQL AB, Widenius si è trovato a disagio nella nuova situazione lavorativa, criticando[1] la gestione dello sviluppo della versione 5.1 di MySQL.

Altri DBMS molto diffusi sono: PostgreSQL, SQLite, MongoDB, Redis.

L'organizzazione dei file sull'hard-disk viene chiamato schema fisico del database. L'utente che usa il DBMS non vedrà mai direttamente come viene organizzato lo schema fisico, ma vedrà una sua rappresentazione astratta, chiamata schema logico.

app 1
app 1
app 2
app 2
app 3
app 3
schema logico
schema logico
files
files
DBMS
DBMS
schema fisico
schema fisico
Viewer does not support full SVG 1.1

Lo schema fisico cambia in base alle diverse aziende che forniscono il software per la connessione tra DBMS e DB; questo pezzo di software viene chiamato storage engine del database. Lo storage engine che useremo è InnoDB, anch'esso di Oracle ed open-source.

La lista degli storage engine è visualizzabile con il comando:

show storage engines;

che nel caso del nostro server restituisce il seguente output.

EngineSupportCommentTransactionsXASavepoints
InnoDBDEFAULTSupports transactions, row-level locking, and foreign keysYESYESYES
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
MEMORYYESHash based, stored in memory, useful for temporary tablesNONONO
BLACKHOLEYES/dev/null storage engine (anything you write to it disappears)NONONO
MyISAMYESMyISAM storage engineNONONO
CSVYESCSV storage engineNONONO
ARCHIVEYESArchive storage engineNONONO
PERFORMANCE_SCHEMAYESPerformance SchemaNONONO
FEDERATEDNOFederated MySQL storage engineNULLNULLNULL

Nota: MEMORY è un particolare storage engine che salva i dati in memoria invece che su disco. Utile per fare prove o salvare tabelle che non devono essere persistenti, ad esempio per gestire sessioni temporanee. Da notare anche che esistono dei DBMS più specifici proprio per gestire DB in memoria, il più diffuso è Redis.

Mappa concettuale

Per riassumere gli aspetti più importante dei DBMS, allego questa mappa concettuale, di cui abbiamo discusso alcuni rami a lezione.