1.1 Principio di costruzione delle lezioni
Tu ed io abbiamo iniziato la nostra conoscenza con i database dal basso . Questa è una caratteristica del mio approccio personale all'insegnamento alle persone. Quando parlo di nuovi argomenti, ti dico sempre prima come utilizzare determinati strumenti nella pratica. E già quando so che una persona sa come usarli, comincio a raccontare come funziona tutto.
Ci sono diverse ragioni per questo approccio, ma la principale è che la risorsa più preziosa e più mancante nel processo di apprendimento è la motivazione dello studente .
Questo approccio è leggermente diverso da quello a cui siamo abituati, che viene utilizzato nelle scuole e nelle università. Ma è tutto chiaro: quando studi a scuola o all'università, hai le giuste priorità: studiare è la cosa più importante nella vita in questo momento.
Se sei impegnato nell'autoeducazione in età adulta, spesso devi già unire i tuoi studi con il lavoro, le faccende domestiche, la cura dei bambini o dei genitori anziani. E qui spesso lo studio non sarà la prima priorità.
Si tratta di priorità. Esiste persino un concetto del genere nel mondo delle startup: fallisci velocemente, fallisci il più rapidamente possibile . Sembra strano, ma in realtà ha molto senso: il compito di una startup è verificare rapidamente se la sua ipotesi è corretta. E se non è vero, allora non è necessario dedicarci anni della tua vita, è meglio capire il prima possibile che non c'è richiesta per un determinato servizio o prodotto.
Quando insegno Java e SQL, utilizzo lo stesso approccio: ti do l'opportunità di capire il prima possibile se stai correndo dalla programmazione o meno . Se ti piace programmare e tu stesso sei riuscito a capire come lavorare con loop e array, allora con l'aiuto di mentori e un programma ben progettato, hai tutte le possibilità di completare i tuoi studi e trovare un lavoro.
Ma un altro fatto non è meno importante: in un paio di giorni di riposo, puoi capire che la programmazione non fa per te. Potresti semplicemente non essere interessato, e va bene così . Quindi, non è necessario dedicarci mesi della tua vita.
Solo il 40% dei laureati lavora nella specialità ricevuta all'università. Pensaci, le persone hanno studiato per 5-6 anni e il 60% di loro ha deciso di non lavorare nella propria specialità. Sì, alcune delle conoscenze acquisite sono ancora utilizzate, ma circa la metà no.
Questo è il valore del concetto Fail Fast: capire il prima possibile che una certa professione, una certa persona o un certo hobby non è adatto a te. E non sprecare tempo ed energia con loro. A lungo termine, questa è un'ottima strategia.
1.2 SQL e tutto, tutto, tutto
Abbiamo finito con l'introduzione filosofica, torniamo a imparare SQL.
Il linguaggio SQL e il DBMS sono cose leggermente diverse. Il linguaggio SQL stesso è una sorta di standard che descrive ciò che può essere scritto nelle query SQL nel database. I DBMS sono già implementazioni di questo standard. Alcuni DBMS implementano alcune funzioni dello standard, il secondo - altre e così via.
Più costoso è il DBMS, maggiori sono le funzionalità dello standard che implementa. Inoltre, molti DBMS spesso implementano le proprie caratteristiche uniche al di fuori degli standard SQL. A volte questo porta a problemi di portabilità: le query SQL scritte per un DBMS potrebbero non funzionare bene per un altro.
Java ha anche una situazione simile. Se un programma Java è scritto sotto Windows, allora non funzionerà normalmente su Linux. Per risolvere questo problema, Java introduce classi speciali che hanno implementazioni diverse per diversi sistemi operativi. Esempio: classe Path che ha implementazioni di WindowsPath, LinuxPath, ecc.
La seconda parte del problema viene risolta con l'aiuto del controllo delle versioni. Tutte le innovazioni di successo di diversi linguaggi o DBMS vengono aggiunte al nuovo standard JDK o SQL. Sai già che esistono diverse versioni di JDK e più nuova è la versione, più funzionalità ha. È lo stesso con SQL.
Nel linguaggio SQL esistono diverse versioni del suo standard, denominate in base all'anno:
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2011
- SQL:2016
- SQL:2019
Buone notizie : non studieremo questi standard. In primo luogo, ci vorranno anni per studiare e padroneggiare tutto questo. E in secondo luogo, questi standard sono come le versioni di Android: solo 5-10 anni dopo il rilascio, lo standard si diffonde in maniera massiccia.
Nei database con grandi quantità di dati, le persone hanno bisogno di affidabilità e stabilità. “Funziona, non toccarlo” è il motto di tutti coloro che lavorano con i database. E il passaggio a una nuova versione dei database avviene ogni 5 anni, quando tutti i vantaggi di tale soluzione sono già evidenti.
1.3 Oltre le parentesi
Come ho detto sopra, ci vogliono anni per diventare un professionista del database. Un professionista sa molte cose che non studieremo. Ma parlerò un po 'di cos'altro c'è nei database.
Quasi tutti i database moderni supportano:
1 Linguaggio procedurale (PL)
RDBMS supporta la capacità di scrivere procedure e funzioni che vengono eseguite su SQL Server e può fare molte cose con i dati durante le query. Ad esempio, una volta ho scritto query PL SQL al server Oracle, che in risposta alla query ha generato ... una pagina HTML con dati. Si, puoi.
2 eventi (trigger)
Tutti i moderni DBMS supportano il meccanismo degli eventi, che sono chiamati trigger nel linguaggio SQL. Un trigger si verifica in risposta a un'azione. Ad esempio, puoi intercettare tutti i tentativi di scrittura nel database e aggiungere l'ora esatta della loro modifica alle nuove righe.
3 Registrazione
I database moderni cercano di essere super veloci, quindi spesso tutte le modifiche (nuove righe, righe cancellate, righe modificate) vengono prima scritte in un file speciale chiamato registro. E solo dopo qualche tempo, il server SQL unirà questi record con il database principale.
In un certo senso, questo è simile al comportamento del Garbage Collector in Java: all'inizio contrassegna semplicemente gli oggetti come eliminati ed esegue la pulizia e l'ottimizzazione della memoria durante i tempi di inattività.
4 plug-in
Nel DBMS, così come in molti programmi, puoi scrivere i tuoi plugin. Tali plug-in consentono di aggiungere tipi di dati univoci, funzioni per lavorare con essi o modificare il comportamento standard del DBMS. Ciò è particolarmente utile quando lavori con un database open source e ci sono alcuni bug.
5 Lavoro distribuito (cluster)
Uno scenario tipico per un server SQL moderno è un cluster di più server. L'opzione più semplice è quando i dati vengono scritti su un server e letti da un gruppo di server. In questo caso è possibile configurare vari scenari per la sincronizzazione del database tra i server SQL.
6 Frammento
Quando ci sono molti dati, iniziano a essere suddivisi in diversi database. Fino al fatto che una tabella può essere memorizzata in parti in diversi database.
Lo sharding può essere verticale e orizzontale. Il frazionamento verticale significa che il tavolo è, per così dire, tagliato da linee verticali, mentre il frazionamento orizzontale è tagliato in linee orizzontali.
Ad esempio, abbiamo deciso di dividere tutti i dati della tabella per anni: per il 2019 - una tabella, per i dati del 2020 - la seconda e così via. Questo sarà lo sharding orizzontale.
7 spingere il non spingere
A un certo punto dello sviluppo dei database, iniziarono ad aggiungervi sempre più logica aziendale. Tutto è iniziato con procedure, funzioni, generazione di pagine Web tramite server e si è concluso con l'aggiunta del supporto per quasi tutti i linguaggi più diffusi al DBMS: Python, JavaScript e persino Java e C ++.
Sembra interessante finché non inizi a entrare nei dettagli: vuoi davvero scrivere la logica aziendale della tua applicazione Web in Java, che verrà eseguita all'interno di un server SQL, dove non ci sono JDK, librerie Java, framework, poca memoria e un sacco di altre restrizioni?