1. Sistemi di Archiviazione Classici

I sistemi di archiviazione classici si riferiscono alla gestione e conservazione dei dati prima della diffusione massiva di database e software avanzati. Possono essere:

  • Fisici: Archivi cartacei, documenti, schedari organizzati manualmente.
  • Digitali non strutturati: File di testo, fogli di calcolo, o semplici strutture di directory su computer.

Caratteristiche

  • Architettura semplice.
  • Dati spesso duplicati o ridondanti.
  • Difficoltà nella ricerca e aggiornamento.
  • Vulnerabilità a errori umani e problemi di sicurezza.

Esempi

  • Schedari fisici per documenti.
  • File system per organizzare manualmente dati in cartelle.

2. Database e DBMS

Un database è una raccolta organizzata di dati strutturati che consente l’accesso, la gestione e l’elaborazione rapida delle informazioni. Un database è come una biblioteca altamente organizzata, dove ogni libro rappresenta un record e le informazioni contenute nel libro (titolo, autore, data di pubblicazione) sono i campi. A differenza di una biblioteca fisica, un database digitale permette di cercare, ordinare e aggiornare le informazioni in modo estremamente rapido ed efficiente.

Tipi di database:

  1. Relazionali: Strutturati in tabelle con relazioni tra di esse.

Esempio pratico: Un database relazionale per un negozio online potrebbe avere tabelle per i prodotti (ID prodotto, nome, prezzo, descrizione), i clienti (ID cliente, nome, cognome, indirizzo) e gli ordini (ID ordine, data, cliente, prodotti).

  1. Non relazionali: Dati non strutturati o semi-strutturati (es. JSON, XML).

Esempio pratico: Un database NoSQL documentale potrebbe essere utilizzato per archiviare i post di un social network, dove ogni post è un documento con campi come autore, data, testo e allegati.

Pubblicità

DBMS (Database Management System)

Un DBMS è un software che consente agli utenti di interagire con un database. È responsabile della creazione, lettura, aggiornamento e cancellazione dei dati.

Funzioni principali:

  • Creazione e gestione di database.
  • Fornitura di interfacce per query (es. SQL).
  • Sicurezza dei dati e controllo degli accessi.
  • Garantire integrità e coerenza dei dati.

Esempi di DBMS:

  • Relazionali: MySQL, PostgreSQL, Oracle Database.
  • Non relazionali: MongoDB, Cassandra, Redis.

Esempi specifici:

Netflix

  • Cassandra: Per gestire i metadati dei contenuti, come i dettagli di film e serie.
  • DynamoDB: Per gestire informazioni sugli utenti e le loro preferenze.
  • MySQL: Per dati relazionali e reportistica interna.
  • ElasticSearch: Per la ricerca nei cataloghi di contenuti.
  • S3 (Amazon Web Services): Per l'archiviazione di contenuti multimediali e backup.

Amazon

  • DynamoDB: Database NoSQL altamente scalabile per la gestione del catalogo prodotti, ordini, e informazioni transazionali.
  • Aurora (RDS): Database relazionale per applicazioni che richiedono conformità ACID.
  • Redshift: Per analisi di big data e business intelligence.
  • ElasticSearch: Per migliorare la funzionalità di ricerca sul sito.
  • S3 (Simple Storage Service): Per archiviazione scalabile e distribuita.

Facebook (Meta)

  • MySQL: Per gestire dati relazionali come profili utenti e connessioni tra amici, con una struttura pesantemente modificata per scalare a miliardi di utenti.
  • Cassandra: Per la gestione di dati distribuiti e alta scalabilità.
  • RocksDB: Database key-value interno utilizzato per alta efficienza nei servizi backend.
  • HBase: Utilizzato per archiviare e analizzare grandi quantità di dati in tempo reale.
  • TAO: Un sistema di database interno per gestire le relazioni tra gli utenti.

Instagram

  • PostgreSQL: Come database principale per i dati relazionali, incluso il backend dell'app.
  • Cassandra: Per la gestione dei feed degli utenti e per garantire la scalabilità.
  • Redis: Per la gestione di dati temporanei e caching (es. velocizzare i feed).
  • Memcached: Per la memorizzazione nella cache di query frequenti.

TikTok

  • TiDB: Un database SQL distribuito per gestire grandi quantità di dati in modo scalabile.
  • HBase: Per la gestione di dati in tempo reale e per lo storage a lungo termine.
  • Redis: Utilizzato per il caching e migliorare le performance in tempo reale.
  • Kafka: Anche se non è un database, è usato per la gestione di messaggi e lo streaming di dati.

Google

  • Bigtable: Un database distribuito altamente scalabile, utilizzato per diversi prodotti (ad esempio, la ricerca web e Gmail).
  • Spanner: Un database relazionale distribuito che garantisce coerenza globale e alta disponibilità.
  • Firestore: Un database NoSQL document-based utilizzato principalmente per app Firebase.
  • MySQL: Per servizi relazionali in varie applicazioni.
  • Colossus: Sistema di archiviazione distribuita che alimenta servizi come Google Drive.

3. Sistemi Informativi e Sistemi Informatici

Sistemi Informativi

Sono sistemi organizzati per raccogliere, elaborare, immagazzinare e distribuire informazioni utili per il processo decisionale.

  • Possono essere manuali (documenti cartacei) o digitalizzati.
  • Utilizzati per ottimizzare il flusso di informazioni in un’organizzazione.

Componenti principali:

  1. Hardware: Computer, server.
  2. Software: DBMS, applicazioni gestionali.
  3. Persone: Utenti e amministratori.
  4. Procedure: Regole e processi per gestire il sistema.

Sistemi Informatici

Un sottoinsieme dei sistemi informativi che si focalizza sull’uso della tecnologia informatica per automatizzare i processi.

Pubblicità

Differenza chiave:

Tutti i sistemi informatici sono sistemi informativi, ma non tutti i sistemi informativi sono informatici.


4. Proprietà ACID

Le proprietà ACID sono un insieme di garanzie per garantire l’affidabilità delle transazioni in un database.

  1. Atomicità: Ogni transazione è indivisibile. O viene completata completamente, o viene annullata.
    Esempio: Se trasferisci denaro da un conto all’altro, entrambe le operazioni devono avvenire.
  2. Coerenza: Dopo una transazione, il database rimane in uno stato valido.
    Esempio: Non si possono trasferire più soldi di quanti ne sono disponibili.
  3. Isolamento: Le transazioni simultanee non interferiscono tra loro.
    Esempio: Due utenti che accedono agli stessi dati non si danneggiano a vicenda.
  4. Durabilità: Una volta completata, una transazione è permanente, anche in caso di guasti.
    Esempio: Dopo un trasferimento di denaro, i dati restano intatti anche in caso di spegnimento improvviso del sistema.

Le proprietà ACID (Atomicità, Consistenza, Isolamento, Durabilità) sono fondamentali per garantire che le transazioni nei database siano affidabili e sicure. Vediamo un esempio pratico per ciascuna proprietà, utilizzando una transazione bancaria come scenario.


Scenario: Trasferimento di denaro

Supponiamo che un utente voglia trasferire €100 dal Conto A al Conto B. Questa operazione può essere rappresentata da due passaggi principali:

  1. Sottrarre €100 dal Conto A.
  2. Aggiungere €100 al Conto B.

Questi passaggi devono rispettare le proprietà ACID per garantire la correttezza della transazione.


1. Atomicità

Definizione: Una transazione è atomica, cioè tutto o niente. O viene eseguita completamente o viene annullata senza lasciare effetti parziali.

  • Esempio pratico: Durante il trasferimento:
    • Se il primo passaggio (sottrarre €100 dal Conto A) riesce, ma il secondo passaggio (aggiungere €100 al Conto B) fallisce per un qualsiasi motivo (es. crash del sistema), allora l'intera transazione viene annullata. Il Conto A deve rimanere invariato, senza perdere i €100.
  • Garanzia: Nessun conto sarà in uno stato incoerente (es. i soldi sono stati prelevati da A, ma non sono stati aggiunti a B).

2. Consistenza

Definizione: Una transazione deve mantenere il database in uno stato consistente, rispettando tutte le regole e i vincoli definiti.

  • Esempio pratico: Prima della transazione, il saldo totale nei due conti è €500 (Conto A: €400, Conto B: €100).
    • Dopo il trasferimento, il saldo totale deve rimanere €500 (Conto A: €300, Conto B: €200).
    • Se un errore interrompe la transazione, la somma dei saldi non deve mai risultare incoerente (es. €400 invece di €500).
  • Garanzia: Le regole del database, come la somma totale dei saldi, vengono sempre rispettate.

3. Isolamento

Definizione: Anche se più transazioni vengono eseguite contemporaneamente, ciascuna transazione deve essere eseguita come se fosse l'unica in corso, senza interferenze.

  • Esempio pratico: Supponiamo che contemporaneamente:
    1. L'utente A trasferisca €100 dal Conto A al Conto B.
    2. Un altro utente visualizzi il saldo dei conti.
    • Durante l'esecuzione della transazione, il secondo utente non deve vedere uno stato intermedio (es. Conto A: €300, ma Conto B: ancora €100). Il saldo aggiornato sarà visibile solo dopo il completamento della transazione.
  • Garanzia: Ogni transazione è isolata dalle altre e il database evita problemi come:
    • Letture sporche (un'operazione legge dati non confermati).
    • Letture non ripetibili (il valore di un dato cambia durante una transazione).
    • Phantom reads (un'altra transazione modifica i dati visibili a una query).

4. Durabilità

Definizione: Una volta confermata una transazione, le sue modifiche devono essere permanenti, anche in caso di guasti al sistema.

  • Esempio pratico: Dopo che il trasferimento di €100 è stato completato e confermato:
    • Anche se il server si spegne improvvisamente o c'è un'interruzione di corrente, i saldi aggiornati (Conto A: €300, Conto B: €200) devono essere conservati nel database.
  • Garanzia: Il database utilizza tecniche come log delle transazioni o write-ahead logging per assicurarsi che i dati confermati non vadano persi.

Esecuzione completa della transazione

  1. Inizio transazione: Il sistema avvia il trasferimento.
  2. Step 1: Sottrae €100 dal Conto A.
  3. Step 2: Aggiunge €100 al Conto B.
  4. Commit: Le modifiche vengono confermate e rese permanenti.
  5. Failover: Se un errore si verifica in uno qualsiasi degli step, il sistema esegue un rollback e riporta il database allo stato precedente all'inizio della transazione.

Ecco un altro scenario pratico che rispetta le proprietà ACID, legato a un sistema di prenotazione di biglietti per un evento.


Scenario: Prenotazione di biglietti per un concerto

Un cliente vuole acquistare 2 biglietti per un concerto. Il sistema deve:

Copertina: 50 Algoritmi per imparare PHP
📚 Consigliato per te

50 Algoritmi per imparare PHP

Una guida step by step per imparare PHP con esercizi svolti.

Vedi su Amazon
  1. Controllare la disponibilità dei biglietti.
  2. Ridurre il numero di biglietti disponibili.
  3. Confermare la prenotazione e registrare i dati del cliente.

La transazione deve rispettare le proprietà ACID per garantire affidabilità, anche in un sistema con molti utenti che prenotano contemporaneamente.


1. Atomicità

Definizione: L'intera operazione deve essere eseguita completamente o annullata senza lasciare effetti parziali.

  • Esempio pratico:
    • Il cliente seleziona 2 biglietti e inizia la prenotazione.
    • Se il pagamento non riesce o il sistema si blocca, i biglietti non devono essere sottratti dal totale né riservati parzialmente.
    • Se il processo fallisce, i biglietti devono rimanere disponibili per altri clienti.

Garanzia: Non ci sono biglietti persi o bloccati inutilmente.


2. Consistenza

Definizione: La transazione deve mantenere il sistema in uno stato consistente, rispettando i vincoli definiti.

  • Esempio pratico:
    • Numero iniziale di biglietti disponibili: 100.
    • Dopo la prenotazione di 2 biglietti, il sistema deve assicurarsi che il numero di biglietti sia ridotto a 98.
    • Se la transazione fallisce, il totale rimane 100.
    • Il database deve rispettare vincoli come: non vendere più biglietti di quelli disponibili.

Garanzia: Nessun dato incoerente (ad esempio, vendere più biglietti di quelli effettivamente disponibili).


3. Isolamento

Definizione: Ogni transazione deve essere isolata dalle altre, garantendo che non interferiscano tra loro.

  • Esempio pratico:
    • Mentre il cliente A sta prenotando 2 biglietti, il cliente B sta contemporaneamente cercando di acquistare gli ultimi 5 biglietti.
    • Se il cliente A completa la prenotazione prima, il cliente B vedrà solo 98 biglietti disponibili nel sistema.
    • Non ci saranno letture intermedie o conflitti tra le transazioni.

Garanzia: Ogni cliente vede uno stato consistente dei biglietti disponibili e le transazioni concorrenti non si sovrappongono.


4. Durabilità

Definizione: Una volta confermata la prenotazione, i dati devono essere permanenti, anche in caso di guasto.

  • Esempio pratico:
    • Dopo che il cliente ha completato la prenotazione e il pagamento è stato confermato:
      • I biglietti vengono registrati come venduti nel database.
      • Se il sistema si blocca immediatamente dopo, al riavvio i biglietti devono risultare ancora prenotati.
    • Questo è garantito da tecniche come write-ahead logging o backup dei dati transazionali.

Garanzia: La prenotazione è salvata in modo permanente una volta confermata.


Esecuzione della transazione

  1. Inizio transazione: Il cliente seleziona i biglietti e avvia la prenotazione.
  2. Controllo disponibilità: Il sistema verifica se ci sono abbastanza biglietti disponibili.
  3. Aggiornamento database: Riduce il numero di biglietti disponibili nel database.
  4. Registrazione dati cliente: Salva la prenotazione associandola al cliente.
  5. Commit: Le modifiche vengono confermate.
  6. Rollback (in caso di errore): Se qualcosa va storto, il sistema riporta i biglietti allo stato originale.

Conclusione

Questo scenario mostra come le proprietà ACID garantiscono che:

  • Non ci siano prenotazioni incomplete o errate.
  • Il database mantenga uno stato coerente anche in presenza di molti utenti concorrenti.
  • I dati delle prenotazioni confermate siano protetti e persistenti.

Le proprietà ACID sono fondamentali per garantire affidabilità nei sistemi di ticketing, dove errori o inconsistenze potrebbero causare perdita di vendite o conflitti tra prenotazioni.

Le proprietà ACID garantiscono che i dati rimangano corretti, coerenti e protetti in tutte le fasi di una transazione. Questo è essenziale in scenari critici come le operazioni bancarie, la gestione degli ordini online o i sistemi di prenotazione.


5. Vantaggi e Svantaggi: Sistemi Classici vs Moderni

CaratteristicaSistemi ClassiciSistemi Moderni
VantaggiSemplici, economici, richiedono poca tecnologia.Velocità, automazione, analisi avanzate, sicurezza.
SvantaggiLenti, errori manuali, difficoltà di accesso.Complessità tecnica, costi elevati, richiedono manutenzione.
FlessibilitàBassa, adattabili solo a piccoli contesti.Elevata, scalabili per grandi volumi di dati.
SicurezzaVulnerabili (fisicamente e digitalmente).Sistemi avanzati di protezione (crittografia, accessi).

6. Database Relazionali vs Non Relazionali

CaratteristicaDatabase RelazionaliDatabase Non Relazionali
ModelloTabelle con righe e colonne (es. SQL).Dati strutturati in documenti, grafi o colonne.
LinguaggioUsano SQL.Query basate su API o linguaggi specifici.
EsempiMySQL, PostgreSQL, SQLite.MongoDB, Cassandra, DynamoDB.
ScalabilitàVerticale (più risorse a un singolo server).Orizzontale (aggiungere server).
Adatto perSistemi ben strutturati (es. ERP, CRM).Big data, dati semi-strutturati (es. social media).
VantaggiIntegrità dati, transazioni ACID.Flessibilità, velocità con grandi volumi di dati.
SvantaggiRigidità nella struttura.Mancanza di ACID in alcune implementazioni.

7. Ridondanza e Inconsistenza

Ridondanza dei Dati

La ridondanza si verifica quando gli stessi dati sono memorizzati in più punti all'interno di un sistema. La ridondanza può portare a risparmi in termini di accesso e performance, ma può anche causare inconsistenza se i dati non vengono aggiornati in tutti i luoghi in cui si trovano.

Inconsistenza dei Dati

L'inconsistenza si verifica quando i dati non sono uniformi, spesso a causa di errori nelle transazioni o nella gestione della ridondanza. Questo può portare a dati errati o contraddittori nel sistema.

Strategie di Gestione:

  • Normalizzazione: Evita la ridondanza nei database relazionali, migliorando la coerenza.
  • Replica dei dati: Utilizzata per migliorare la disponibilità, ma rischia di introdurre

8 La Concorrenza e il Locking nei Database

Concorrenza nei Database

La gestione della concorrenza è cruciale per un DBMS. Più utenti o applicazioni possono cercare di accedere o modificare i dati contemporaneamente. Senza una corretta gestione, si possono generare conflitti e incoerenze nei dati.

Locking (Blocco)

  • Locking a livello di riga: Blocca solo la riga di dati in cui un'operazione è in corso.
  • Locking a livello di tabella: Blocca tutta la tabella durante l'operazione.
  • Deadlock: Si verifica quando due o più transazioni sono in attesa l'una dell'altra, e nessuna di esse può proseguire.

Gestione della Concorrenza

I DBMS moderni utilizzano algoritmi di controllo della concorrenza per evitare deadlock e garantire che le transazioni siano eseguite in modo sicuro senza interferire con altre operazioni.

9 La Sicurezza dei Dati nei Sistemi Informativi

Sicurezza dei Dati

Un tema cruciale che si lega alla protezione dell’integrità, della riservatezza e della disponibilità dei dati. I sistemi di gestione dei database devono implementare misure di autenticazione, autorizzazione, crittografia e audit per proteggere i dati da accessi non autorizzati.

Tecniche di Sicurezza

  • Crittografia: Protezione dei dati sensibili tramite l'uso di algoritmi che rendono il dato incomprensibile senza la chiave di decrittazione.
  • Autenticazione e Autorizzazione: Verifica dell'identità degli utenti (autenticazione) e gestione dei permessi su ciò che possono fare con i dati (autorizzazione).
  • Audit: Monitoraggio delle attività nel database per garantire che non vi siano violazioni delle politiche di sicurezza.

Vantaggi della Sicurezza Avanzata:

  • Protezione dei dati sensibili.
  • Garanzia di conformità alle normative sulla protezione dei dati (ad esempio, GDPR).
  • Minimizzazione del rischio di attacchi o violazioni.

Svantaggi:

  • Costi aggiuntivi per implementare soluzioni di sicurezza avanzate.
  • Possibile rallentamento delle prestazioni a causa delle operazioni di crittografia e autenticazione.

Conclusioni

  • I sistemi classici hanno ancora un ruolo, ma le soluzioni moderne (DBMS) dominano per complessità e volumi elevati.
  • Le proprietà ACID garantiscono la robustezza dei database relazionali, ma le soluzioni non relazionali offrono flessibilità per specifici scenari.
  • La scelta tra sistemi relazionali e non dipende dal contesto d’uso: dati strutturati vs semi-strutturati o non strutturati.