1.1 Zasada konstrukcji wykładów
Ty i ja zaczęliśmy naszą znajomość z bazami danych od dołu . Jest to cecha mojego osobistego podejścia do nauczania ludzi. Mówiąc o nowych tematach, zawsze najpierw mówię, jak zastosować określone narzędzia w praktyce. I już kiedy wiem, że dana osoba umie się nimi posługiwać, zaczynam opowiadać, jak to wszystko działa.
Istnieje kilka powodów takiego podejścia, ale głównym z nich jest to, że najcenniejszym i najbardziej brakującym zasobem w procesie uczenia się jest motywacja uczniów .
Podejście to różni się nieco od tego, do którego jesteśmy przyzwyczajeni, które jest stosowane w szkołach i na uczelniach. Ale wszystko jest jasne: kiedy uczysz się w szkole lub na uniwersytecie, masz odpowiednie priorytety: nauka jest w tej chwili najważniejsza w życiu.
Jeśli zajmujesz się samokształceniem w wieku dorosłym, to często już musisz łączyć naukę z pracą, obowiązkami domowymi, opieką nad dziećmi czy starszymi rodzicami. I tutaj często nauka nie będzie priorytetem.
Wszystko zależy od priorytetów. W świecie startupów istnieje nawet taka koncepcja – Fail Fast, fail tak szybko, jak to możliwe . Brzmi to dziwnie, ale w rzeczywistości ma to duży sens: zadaniem startupu jest szybkie sprawdzenie, czy jego hipoteza jest poprawna. A jeśli to nieprawda, to nie trzeba poświęcać na to lat życia, lepiej jak najwcześniej zrozumieć, że nie ma popytu na określoną usługę lub produkt.
Ucząc Javy i SQL stosuję to samo podejście: daję Ci możliwość jak najwcześniejszego zrozumienia, czy nie spieszysz się z programowaniem . Jeśli lubisz programować i sam byłeś w stanie rozgryźć, jak pracować z pętlami i tablicami, to z pomocą mentorów i dobrze zaprojektowanego programu masz wszelkie szanse na ukończenie studiów i znalezienie pracy.
Ale nie mniej ważny jest inny fakt: za kilka dni wolnego możesz zrozumieć, że programowanie nie jest dla ciebie. Możesz po prostu nie być tym zainteresowany i to jest w porządku . Nie musisz więc poświęcać na to miesięcy swojego życia.
Tylko 40% absolwentów pracuje w specjalności, którą otrzymali na uczelni. Pomyśl o tym, ludzie studiowali przez 5-6 lat, a 60% z nich zdecydowało się nie pracować w swojej specjalności. Tak, część zdobytej wiedzy jest nadal wykorzystywana, ale mniej więcej połowa nie.
Na tym polega wartość koncepcji Fail Fast - jak najwcześniejsze zrozumienie, że określony zawód, określona osoba lub określone hobby nie są dla Ciebie odpowiednie. I nie trać na nie czasu i energii. Na dłuższą metę jest to bardzo dobra strategia.
1.2 SQL i wszystko, wszystko, wszystko
Skończyliśmy z filozoficznym wprowadzeniem, wróćmy do nauki SQL.
Język SQL i DBMS to nieco inne rzeczy. Sam język SQL jest swego rodzaju standardem opisującym, co można zapisać w zapytaniach SQL do bazy danych. DBMS to już implementacje tego standardu. Niektóre DBMS implementują niektóre funkcje standardu, inne inne i tak dalej.
Im droższy DBMS, tym więcej cech standardu implementuje. Ponadto wiele systemów DBMS często implementuje własne unikalne funkcje poza standardami SQL. Czasami prowadzi to do problemów z przenośnością: zapytania SQL napisane dla jednego DBMS mogą nie działać dobrze dla innego.
Java ma również podobną sytuację. Jeśli program Java jest napisany w systemie Windows, nie będzie działał normalnie w systemie Linux. Aby rozwiązać ten problem, Java wprowadza specjalne klasy, które mają różne implementacje dla różnych systemów operacyjnych. Przykład: klasa Path, która ma implementacje WindowsPath, LinuxPath itp.
Druga część problemu jest rozwiązywana za pomocą wersjonowania. Wszystkie udane innowacje z różnych języków lub DBMS są dodawane do nowego standardu JDK lub SQL. Wiesz już, że istnieją różne wersje JDK, a im nowsza wersja, tym więcej posiada funkcji. Tak samo jest z SQLem.
W języku SQL istnieje kilka wersji jego standardu, które są nazwane według roku:
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2011
- SQL:2016
- SQL:2019
Dobra wiadomość : nie będziemy studiować tych standardów. Po pierwsze, nauka i opanowanie tego wszystkiego zajmie lata. Po drugie, te standardy są jak wersje Androida: zaledwie 5-10 lat po wydaniu standard staje się masowo rozpowszechniony.
W bazach danych zawierających duże ilości danych ludzie potrzebują niezawodności i stabilności. „To działa, nie dotykaj tego” to motto każdego, kto pracuje z bazami danych. A przejście na nową wersję baz odbywa się co 5 lat, kiedy wszystkie zalety takiego rozwiązania są już oczywiste.
1.3 Poza nawiasami
Jak powiedziałem powyżej, potrzeba lat, aby zostać profesjonalistą w zakresie baz danych. Profesjonalista wie wiele rzeczy, których nie będziemy studiować. Ale powiem trochę o tym, co jeszcze jest w bazach danych.
Prawie wszystkie nowoczesne bazy danych obsługują:
1 język proceduralny (PL)
RDBMS obsługują możliwość pisania procedur i funkcji, które działają na SQL Server i mogą robić wiele rzeczy z danymi podczas zapytań. Na przykład kiedyś napisałem zapytania PL SQL do serwera Oracle, który w odpowiedzi na zapytanie wygenerował… stronę HTML z danymi. Tak, możesz.
2 zdarzenia (wyzwalacze)
Wszystkie współczesne DBMS obsługują mechanizm zdarzeń, które w języku SQL nazywane są wyzwalaczami. Wyzwalacz pojawia się jako odpowiedź na jakąś akcję. Można np. przechwycić wszystkie próby zapisu do bazy danych i dodać dokładny czas ich zmiany do nowych wierszy.
3 Logowanie
Nowoczesne bazy danych starają się być superszybkie, dlatego często wszystkie zmiany (nowe wiersze, usunięte wiersze, zmienione wiersze) są najpierw zapisywane w specjalnym pliku zwanym dziennikiem. I dopiero po pewnym czasie serwer SQL połączy te rekordy z główną bazą danych.
Pod pewnymi względami jest to podobne do zachowania Garbage Collectora w Javie: po prostu oznacza najpierw obiekty jako usunięte, aw czasie bezczynności przeprowadza czyszczenie i optymalizację pamięci.
4 wtyczki
Do DBMS, jak i do wielu programów, można pisać własne wtyczki. Takie wtyczki pozwalają dodawać unikalne typy danych, funkcje do pracy z nimi lub zmieniać standardowe zachowanie DBMS. Jest to szczególnie przydatne, gdy pracujesz z bazą danych typu open source i występują pewne błędy.
5 Praca rozproszona (klastry)
Typowym scenariuszem dla nowoczesnego serwera SQL jest klaster kilku serwerów. Najprostszą opcją jest zapisywanie danych na jednym serwerze i odczytywanie ich z grupy serwerów. W takim przypadku można skonfigurować różne scenariusze synchronizacji bazy danych między serwerami SQL.
6 Odłamki
Gdy danych jest dużo, zaczynają być one dzielone na różne bazy danych. Aż do tego, że jedna tabela może być przechowywana w częściach w różnych bazach danych.
Sharding może być pionowy i poziomy. Pionowe sharding oznacza, że stół jest niejako cięty pionowymi liniami, podczas gdy sharding poziomy jest cięty na poziome.
Na przykład zdecydowaliśmy się podzielić wszystkie dane w tabeli na lata: dla 2019 r. - jedna tabela, dla danych z 2020 r. - druga i tak dalej. Będzie to sharding poziomy.
7 shove bez shove
Na pewnym etapie rozwoju baz danych zaczęto dodawać do nich coraz więcej logiki biznesowej. Wszystko zaczęło się od procedur, funkcji, generowania stron internetowych przez serwery, a skończyło na dodaniu do DBMS obsługi prawie wszystkich popularnych języków: Python, JavaScript, a nawet Java i C++.
Brzmi fajnie, dopóki nie przejdziesz do szczegółów: czy naprawdę chcesz napisać logikę biznesową aplikacji internetowej w Javie, która będzie wykonywana na serwerze SQL, gdzie nie ma JDK, bibliotek Java, frameworków, mało pamięci i dużo inne ograniczenia?