Anteprima
Vedrai una selezione di 15 pagine su 68
Cybersecurity Pag. 1 Cybersecurity Pag. 2
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 6
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 11
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 16
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 21
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 26
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 31
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 36
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 41
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 46
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 51
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 56
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 61
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Cybersecurity Pag. 66
1 su 68
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Creazione di una tabella con il linguaggio SQL

(DML). Esempio (serve solo per capire): Per creare una tabella do il comando "CREATE TABLE" seguito dal nome della tabella "Clienti" e tra le graffe definisco il numero di colonne e che tipo di dati devono contenere; in questo caso sono 3 colonne: "IDCliente", "Nome" e "Cognome", la prima colonna contiene un numero intero, le altre due contengono dei caratteri di lunghezza massima "20".

Posso inserire una riga nella tabella ➝ Questo serve per interrogare la base di dati. In questo esempio si cercano solo quei record dove il campo "Nome" è uguale alla stringa "Mario".

Questo linguaggio SQL non dice alla macchina come fare le operazioni ma solo il risultato che deve ottenere. Il "come" non è un problema di chi dà il comando ma è un problema del DBMS.

In alcuni programmi, come ad esempio Microsoft Access, esiste anche il linguaggio QBE ➝ Query By Example, che

permette di creare anch'esso basi di dati ma, in più, dà anche la possibilità di estrarre record usando il linguaggio visuale tramite esempi.

In pratica, si mostra graficamente:

  • Quali campi si vogliono selezionare
  • Quali criteri adottare per selezionare i valori dei campi
  • Quali campi si vuole visualizzare e in quale ordine

Le azioni richieste dall'utente vengono tradotte in linguaggio SQL per poi essere estrapolate dalla base di dati. Di fatto, il QBE aiuta a produrre query in maniera più semplice.

Una transazione è una richiesta di modifica della base di dati provocate dalle operazioni che si possono fare sulle tabelle, esempi di transazioni:

  • Inserimento di una tupla
  • Cancellazione di una tupla
  • Aggiornamento di un valore

Quando si parla di transazioni concorrenti si intendono le richieste contemporanee di modifica della stessa tabella/tupla/attributo. Quando due o più transazioni sono concorrenti deve essere

Garantita l'integrità e la consistenza dei dati. Le transazioni che possono essere fatte sulle basi di dati devono sempre avere le seguenti proprietà (ACID):

  • ATOMIC: deve essere indivisibile, tutte le singole istruzioni che compongono una transazione devono essere effettuate, oppure nessuna.
  • CONSISTENT: la base di dati è in stato consistente prima e dopo la transazione.
  • ISOLATED: durante una transazione, un altro utente non deve essere in grado di visualizzare e interrogare quei dati prima del termine della transazione.
  • DURABLE: Una volta che la transazione è stata completata, le sue modifiche devono persistere nella base di dati anche in caso di fallimenti hardware o software.

Esempio:

Posso vedere la transazione come un insieme di operazioni diverse. La mia transazione, che potrebbe risultare istantanea, ha almeno 6 operazioni diverse. Il problema è che se la transazione fallisce dopo l'operazione 3, la base di dati rimane in stato inconsistente.

Perché avrei € 1.000 in meno sul CC1 e non avrei ancora aggiunto i € 1.000 sul CC3.

Il DBMS ha dei meccanismi che si chiamano di Rollback, che gli permettono, nel caso in cui la transazione fallisca a metà delle operazioni, di annullare tutte quelle precedenti per tornare allo stato consistente iniziale. In questo modo, la transazione può essere ritenuta ACID.

Limitazioni del DB relazionali:

  1. La rappresentazione delle informazioni nella base di dati non rispecchia più la rappresentazione nel mondo reale delle entità. Con la crescita del Web e l'avvento dei Big Data, gli sviluppatori di applicazioni Web (e Cloud-based) hanno bisogno di:
    • Grandi volumi di operazioni di lettura e scrittura dalle basi di dati;
    • Bassi tempi di risposta;
    • Elevata disponibilità.
  2. I DB relazionali presentano problemi di scalabilità. Le prestazioni si possono migliorare usando hardware efficienti (scalabilità verticale); tuttavia
ci sono dei limiti tecnologici (più in là del hardware più efficiente che esista non posso andare) ed è anche costoso. Oppure è possibile distribuire il database su server multipli (scalabilità orizzontale), ma ciò non basta per due motivi: - Per le prestazioni: pensiamo ad esempio a un'operazione che deve accedere a tabelle che risiedono su nodi diversi. - Per poter garantire che le transazioni siano ACID: è difficile implementare operazioni su nodi diversi che devono terminare correttamente o fallire tutte insieme. 3. Se un database deve eseguire su un singolo server, dobbiamo comunque prevedere un server di backup. Il server di backup mantiene una replica di tutto il database. Nel caso in cui il server primario si guasti, il server di backup può prendere il suo posto e garantire la disponibilità del servizio. Tuttavia, tale configurazione risulta inefficiente perché il server di backup resta

Inutilizzato per la maggior parte del tempo, quindi sono risorse hardware sprecate. Una soluzione potrebbe essere quella di utilizzare quel server di backup per distribuire il carico e gestire situazioni di guasti, utilizzando le risorse più efficientemente, in modo da non tenerlo inutilizzato.

La struttura delle tabelle di un DB relazionale è rigida, perché ogni tabella contiene dati omogenei (ad es. dati solo dei clienti o dei conti correnti), cioè tutte le tuple hanno gli stessi attributi, i quali hanno un formato particolare e molto rigido.

Alcune applicazioni necessitano di maggiore flessibilità nella struttura dei dati da memorizzare. Esempio: trasporto di merci eterogenee: dobbiamo memorizzare in una tabella le caratteristiche dei prodotti trasportati. Es: un computer e una lavatrice devono memorizzare attributi diversi.

Esempio: applicazione IoT per il tracciamento di prodotti: diversi dispositivi con sensori diversi. Es. un sensore deve rilevare la

temperatura (valori in gradi celsius), un altro sensore la posizione(coordinate geografiche). 62Quando si devono gestire grandi moli di dati e grandi moli di utenti e, magari, dati che sono eterogenei traloro, i database non relazionali, detti anche NoSQL (Not-only SQL), sono un’alternativa al modellorelazionale perché garantiscono:

  • Scalabilità
  • Flessibilità
  • Disponibilità
  • Basso costo (perché esistono soluzioni open-source, che in genere sono gratis)

Sono progettati per lavorare su server distribuiti ed eliminano i vincoli del modello relazionale e delletransazioni a loro associate, ovvero la rigidità della struttura delle tabelle e la consistenza stretta.Le copie multiple di una tabella devono essere mantenute consistenti.Two-phase commit: una transazione che modifica il database principale e poi aggiorna le copie.L’utente scrive un dato sul primo server. Ilserver 1 manda la stessa operazione alsecondo server

(questo prima di dare l'OK all'utente). Il server 2 manda l'OK al server1, che poi lo manda anche all'utente. Questa operazione richiede un tempo non trascurabile, soprattutto al crescere del numero di server. Inoltre, durante questo periodo, il nuovo dato non è disponibile.

Questo è un problema, ma è un problema che dipende dall'applicazione. In alcune applicazioni, garantire sia alta disponibilità che consistenza è obbligatorio (es: DB di una banca); in altre applicazioni è più importante avere operazioni veloci, anche a costo di garantire meno consistenza.

Esempio: e-commerce. L'utente aggiunge un elemento al carrello. Il primo server risponde subito all'utente, così egli può continuare con le sue operazioni. Nel server 2 ci sono ancora 2 soli elementi nel carrello, quindi siamo in uno stato inconsistente, ma questo non è un problema perché nessuno starà sbirciando nel

carrello dell'utente. Se il server 2 si rompe, il massimo che può succedere è che anche nel server 1 ci saranno 2 soli elementi nel carrello, non è grave. In questo esempio, dunque, la consistenza non è importante, è più importante la velocità delle operazioni. Comunque, poi il database deve essere aggiornato e verrà fatto con calma. Quindi, alla fine le copie saranno consistenti. Questo concetto si chiama eventual consistency.

Teorema CAP. Noto anche come teorema di Brewer. Secondo questo teorema, per fare un database distribuito è possibile soddisfare contemporaneamente solamente 2 di queste 3 proprietà:

  • Consistency (consistenza): presenza di copie multiple consistenti;
  • Availability (disponibilità): fornire una risposta a qualunque query in ogni momento;
  • Partition protection (protezione contro le partizioni): se la connessione tra due server si interrompe, i dati restano accessibili.

quando tutte le operazioni sono finite posso continuare. Questo sistema è consistente perché mantiene le copie consistenti ma nell'intervallo tra 1 e 4 quel dato non è disponibile. In questo caso, il dato è subito disponibile ma non è subito consistente.

Poniamo ad esempio che, ad un certo punto, il cavo che collega il server 1 e il server 2 si rompa. Abbiamo una partizione nel sistema perché S1 non può più contattare S2. Se un utente scrive su S1, un utente che guarda su S2 cosa può fare?

  • Opzione 1: Available but not Consistent → S2 può restituire dati inconsistenti.
  • Opzione 2: Consistent but not Available → S2 viene disattivato.
  • Opzione 3: Consistent and Available → il sistema si blocca in caso di partizioni perché non è possibile garantire né consistenza né disponibilità.

Pongo i problemi su questo triangolo. È possibile spostarsi solo su uno

dei 3 lati del triangolo: a. Posso spostarmi sul lato CA (Consistent and Available) in cui eventuali problemi di rete possono bloccare il sistema perché non ho la proprietà P (partition protection). b. Posso spostarmi sul segmento AP, in cui è garantita sempre la disponibilità, il sistema non si rompe, ma alcuni dati possono essere inconsistenti. c. Posso spostarmi sul segmento CP, in cui una parte del database può non essere raggiungibile. Quando si passa a database non relazionali, fatti apposte per database distribuiti, non si possono più usare le transazioni ACID, perché non è possibile avere tutte quelle proprietà insieme. I database NoSQL possiedono proprietà BASE: Esistono più modelli di database NoSQL, ciascuno dei quali organizza e gestisce i dati in modo diverso. Un altro motivo per passare a database non relazionali consiste nel fatto che i dati da immagazzinare nel database possono essere eterogenei. In un

Il database relazionale è un tipo di database che organizza i dati in tabelle strutturate, in cui le informazioni sono rappresentate da righe e colonne. Ogni tabella rappresenta una entità e ogni riga rappresenta una istanza di quella entità. Le colonne rappresentano gli attributi o le caratteristiche di quella entità.

Le tabelle nel database relazionale sono collegate tra loro attraverso relazioni definite da chiavi primarie e chiavi esterne. Le chiavi primarie sono uniche per ogni riga e vengono utilizzate per identificare in modo univoco ogni istanza di un'entità. Le chiavi esterne sono utilizzate per stabilire relazioni tra le tabelle, consentendo di recuperare dati correlati da più tabelle.

Il database relazionale utilizza il linguaggio SQL (Structured Query Language) per interrogare e manipolare i dati. SQL consente di eseguire operazioni come l'inserimento, l'aggiornamento e la cancellazione dei dati, nonché l'interrogazione dei dati per ottenere informazioni specifiche.

Dettagli
Publisher
A.A. 2021-2022
68 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher nency.lg di informazioni apprese con la frequenza delle lezioni di Cybersecurity e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pisa o del prof Nardini Giovanni.