1.1 Principe opbouw colleges
Jij en ik zijn van onderaf begonnen met onze kennismaking met databases . Dit is een kenmerk van mijn persoonlijke benadering om mensen les te geven. Als ik het over nieuwe onderwerpen heb, vertel ik altijd eerst hoe je bepaalde tools in de praktijk kunt gebruiken. En al als ik weet dat iemand weet hoe hij ze moet gebruiken, begin ik te vertellen hoe alles werkt.
Er zijn verschillende redenen voor deze aanpak, maar de belangrijkste is dat de meest waardevolle en meest ontbrekende bron in het leerproces de motivatie van de leerling is .
Deze aanpak is iets anders dan we gewend zijn, die wordt gebruikt op scholen en universiteiten. Maar alles is duidelijk: als je studeert op school of universiteit, heb je de juiste prioriteiten: studeren is op dit moment het belangrijkste in het leven.
Als je op volwassen leeftijd bezig bent met zelfstudie, moet je je studie vaak al combineren met werk, huishoudelijke taken, de zorg voor kinderen of bejaarde ouders. En hier zal studie vaak niet de eerste prioriteit zijn.
Het draait allemaal om prioriteiten. Er is zelfs zo'n concept in de wereld van startups - Fail Fast, faal zo snel mogelijk . Het klinkt vreemd, maar in feite is het heel logisch: de taak van een startup is om snel te controleren of zijn hypothese klopt. En als het niet waar is, hoef je er geen jaren van je leven aan te besteden, het is beter om zo vroeg mogelijk te begrijpen dat er geen vraag is naar een bepaalde dienst of product.
Bij het onderwijzen van Java en SQL gebruik ik dezelfde aanpak: ik geef je de kans om zo vroeg mogelijk te begrijpen of je haast hebt met programmeren of niet . Als je van programmeren houdt en je hebt zelf kunnen bedenken hoe je met loops en arrays moet werken, dan heb je met behulp van mentoren en een goed ontworpen programma alle kansen om je studie af te ronden en een baan te vinden.
Maar een ander feit is niet minder belangrijk: over een paar vrije dagen begrijp je dat programmeren niets voor jou is. Misschien ben je er gewoon niet in geïnteresseerd, en dat is oké . U hoeft er dus geen maanden van uw leven aan te besteden.
Slechts 40% van de afgestudeerden werkt in de specialiteit die ze aan de universiteit hebben gekregen. Denk er eens over na, mensen hebben 5-6 jaar gestudeerd en 60% van hen besloot niet in hun specialiteit te werken. Ja, een deel van de opgedane kennis wordt nog steeds gebruikt, maar ongeveer de helft niet.
Dit is de waarde van het Fail Fast-concept - om zo vroeg mogelijk te begrijpen dat een bepaald beroep, een bepaald persoon of een bepaalde hobby niet bij u past. En verspil je tijd en energie er niet aan. Op de lange termijn is dit een zeer goede strategie.
1.2 SQL en alles, alles, alles
We zijn klaar met de filosofische inleiding, laten we teruggaan naar het leren van SQL.
SQL-taal en DBMS zijn iets andere dingen. De SQL-taal zelf is een soort standaard die beschrijft wat er in SQL-query's naar de database kan worden geschreven. DBMS zijn al implementaties van deze standaard. Sommige DBMS implementeren sommige functies van de standaard, de tweede - andere, enzovoort.
Hoe duurder het DBMS, hoe meer kenmerken van de standaard het implementeert. Ook implementeren veel DBMS'en vaak hun eigen unieke functies buiten de SQL-standaarden om. Soms leidt dit tot problemen met de overdraagbaarheid: SQL-query's die voor het ene DBMS zijn geschreven, werken mogelijk niet goed voor een ander.
Java heeft ook een vergelijkbare situatie. Als een Java-programma onder Windows is geschreven, werkt het niet normaal onder Linux. Om dit probleem op te lossen introduceert Java speciale klassen met verschillende implementaties voor verschillende besturingssystemen. Voorbeeld: Path-klasse met implementaties van WindowsPath, LinuxPath, enz.
Het tweede deel van het probleem wordt opgelost met behulp van versiebeheer. Alle succesvolle innovaties uit verschillende talen of DBMS worden toegevoegd aan de nieuwe JDK- of SQL-standaard. U weet al dat er verschillende versies van de JDK zijn, en hoe nieuwer de versie, hoe meer functies deze heeft. Met SQL is het net zo.
In de SQL-taal zijn er verschillende versies van de standaard, die per jaar zijn genoemd:
- SQL: 1999
- SQL: 2003
- SQL: 2006
- SQL: 2011
- SQL: 2016
- SQL: 2019
Goed nieuws : we zullen deze normen niet bestuderen. Ten eerste zal het jaren duren om dit allemaal te bestuderen en onder de knie te krijgen. En ten tweede zijn deze standaarden als versies van Android: slechts 5-10 jaar na de release wordt de standaard enorm wijdverspreid.
In databases met grote hoeveelheden data hebben mensen behoefte aan betrouwbaarheid en stabiliteit. “Het werkt, raak het niet aan” is het motto van iedereen die met databases werkt. En de overgang naar een nieuwe versie van databases gebeurt elke 5 jaar, wanneer alle voordelen van een dergelijke oplossing al duidelijk zijn.
1.3 Voorbij de haakjes
Zoals ik hierboven al zei, duurt het jaren om een databaseprofessional te worden. Een professional weet veel dingen die we niet zullen bestuderen. Maar ik zal een beetje praten over wat er nog meer in de databases staat.
Bijna alle moderne databases ondersteunen:
1 proceduretaal (PL)
RDBMS ondersteunt de mogelijkheid om procedures en functies te schrijven die op SQL Server worden uitgevoerd en kan veel dingen doen met gegevens tijdens query's. Ik heb bijvoorbeeld ooit PL SQL-query's naar de Oracle-server geschreven, die als reactie op de query ... een HTML-pagina met gegevens genereerde. Ja, dat kan.
2 gebeurtenissen (triggers)
Alle moderne DBMS ondersteunen het mechanisme van gebeurtenissen, die in de SQL-taal triggers worden genoemd. Een trigger treedt op als reactie op een actie. U kunt bijvoorbeeld alle pogingen om naar de database te schrijven onderscheppen en het exacte tijdstip van hun wijziging toevoegen aan nieuwe regels.
3 Loggen
Moderne databases proberen supersnel te zijn, dus vaak worden alle wijzigingen (nieuwe rijen, verwijderde rijen, gewijzigde rijen) eerst weggeschreven naar een speciaal bestand dat een log wordt genoemd. En pas na enige tijd zal de SQL-server deze records samenvoegen met de hoofddatabase.
In sommige opzichten is dit vergelijkbaar met het gedrag van de Garbage Collector in Java: het markeert ook objecten in eerste instantie als verwijderd en voert geheugenopruiming en -optimalisatie uit tijdens inactiviteit.
4 plug-ins
Voor het DBMS, evenals voor veel programma's, kunt u uw eigen plug-ins schrijven. Met dergelijke plug-ins kunt u unieke gegevenstypen en functies toevoegen om ermee te werken of het standaardgedrag van het DBMS wijzigen. Dit is vooral handig wanneer u met een open source-database werkt en er enkele bugs zijn.
5 Verdeeld werk (clusters)
Een typisch scenario voor een moderne SQL-server is een cluster van meerdere servers. De eenvoudigste optie is wanneer gegevens naar één server worden geschreven en van een groep servers worden gelezen. In dit geval kunt u verschillende scenario's configureren voor databasesynchronisatie tussen SQL-servers.
6 Scherven
Wanneer er veel gegevens zijn, beginnen ze te worden opgesplitst in verschillende databases. Tot zover het feit dat één tabel in delen in verschillende databases kan worden opgeslagen.
Sharding kan verticaal en horizontaal zijn. Verticale sharding houdt in dat de tafel als het ware wordt doorgesneden door verticale lijnen, terwijl horizontale sharding wordt doorgesneden in horizontale lijnen.
We hebben bijvoorbeeld besloten om alle gegevens in de tabel in jaren te verdelen: voor 2019 - één tabel, voor de gegevens van 2020 - de tweede, enzovoort. Dit wordt horizontale sharding.
7 duw de niet-schuif
Op een bepaald moment in de ontwikkeling van databases werd er steeds meer bedrijfslogica aan toegevoegd. Het begon allemaal met procedures, functies, het genereren van webpagina's door servers, en eindigde met de toevoeging van ondersteuning voor bijna alle populaire talen aan het DBMS: Python, JavaScript en zelfs Java en C++.
Klinkt cool totdat je in de details begint te treden: wil je echt de bedrijfslogica van je webapplicatie in Java schrijven, die zal worden uitgevoerd in een SQL-server, waar er geen JDK, java-bibliotheken, frameworks, weinig geheugen en veel andere beperkingen?
GO TO FULL VERSION