1.1 Принцип побудови лекцій
Ми з тобою почали знайомство з базами даних знизу . Це особливість мого особистого підходу до навчання людей. Говорячи про нові теми, я завжди спочатку розповідаю, як користуватись тими чи іншими інструментами на практиці. І вже коли я знаю, що людина вміє їх використовувати, я починаю розповідати, як усе влаштовано.
Причин такого підходу кілька, але основна полягає в тому, що найціннішим і недостатнім ресурсом у процесі навчання є мотивація студента .
Цей підхід трохи відрізняється від звичного нам, який використовується у школах та у вузах. Але там все зрозуміло: коли ти навчаєшся в школі чи вузі, у тебе правильно розставлені пріоритети: навчання — найважливіша річ у житті в цей момент.
Якщо ж ти займаєшся самоосвітою в дорослому віці, то часто вже доводиться поєднувати навчання з роботою, домашніми справами, піклуванням про дітей або старих батьків. І тут часто навчання стане далеко не першим пріоритетом.
Вся справа саме у пріоритетах. Є навіть така концепція у світі стартаперів - Fail Fast, провалитися якнайшвидше . Звучить дивно, хоча насправді в цьому дуже багато сенсу: завдання стартапера — швидко перевірити, чи його гіпотеза вірна. І якщо вона не вірна, то не потрібно витрачати на неї роки свого життя, краще якомога раніше зрозуміти, що на певну послугу чи продукт немає попиту.
При навчанні Java і SQL я використовую той же підхід: я даю можливість якомога раніше зрозуміти, прет тебе від програмування чи ні . Якщо пре, і тобі подобається програмувати, і ти сам зміг розібратися, як працювати з циклами та масивами, то за допомогою менторів та грамотно складеної програми у тебе є всі шанси закінчити навчання та знайти роботу.
Але не менш важливим є й інший факт: за пару вихідних ти можеш зрозуміти, що програмування — це не твоє. Воно може бути тобі просто не цікаво, і це нормально . Отже, не треба витрачати на нього місяці свого життя.
Лише 40% випускників працюють за спеціальністю, яку вони здобули у виші. Вдумайся, люди навчалися 5-6 років, і 60% з них вирішабо не працювати за фахом. Так, частина здобутих знань вони все одно використовуються, але десь половину – ні.
У цьому й цінність концепції Fail Fast – якомога раніше зрозуміти, що тобі не підходить певна професія, певна людина чи певне хобі. І не витрачати на них свій час та сабо. У довгостроковій перспективі це дуже відмінна стратегія.
1.2 SQL і все, все, все
З філософським вступом ми закінчабо, повернемося до вивчення SQL.
Мова SQL та СУБД – це трохи різні речі. Сама мова SQL - це якийсь стандарт, який визначає, що можна писати в SQL-запитах до бази даних. СУБД - це вже реалізації цього стандарту. Якась СУБД реалізує одні функції стандарту, друга — інші тощо.
Чим дорожчий СУБД, тим більше можливостей стандарту вона реалізує. Також багато СУБД часто реалізують свої власні унікальні можливості поза стандартами SQL. Іноді це призводить до проблем із переносимістю: SQL запити, написані однієї СУБД, можуть погано працювати в інший.
Java також має схожу ситуацію. Якщо Java-програма написана під Windows, то на Linux вона нормально не працюватиме. Щоб вирішити цю проблему, Java вводять спеціальні класи, які мають різні реалізації під різні операційні системи. Приклад: клас Path, який має реалізацію WindowsPath, LinuxPath і т.д.
Другу частину проблеми вирішують за допомогою версіонування. Усі вдалі нововведення з різних мов або СУБД додаються до нового стандарту JDK або SQL. Ти вже знаєш, що є різні версії JDK, і що версія новіша, то в ній більше функцій. З мовою SQL те саме.
У мові SQL існує кілька версій його стандарту, які називаються за роками:
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2011
- SQL:2016
- SQL:2019
Хороша новина : вивчати ці стандарти ми не будемо. По-перше, щоб усе це вивчити та освоїти, знадобляться роки. А по-друге, ці стандарти як версії Android: тільки через 5-10 років після виходу стандарт ставати масово поширеним.
У базах даних при великих обсягах даних людям потрібна надійність та стабільність. "Працює - не чіпай" - це девіз усіх, хто працює з базами даних. І перехід на нову версію баз даних робиться раз на 5 років, коли всі переваги такого рішення вже очевидні.
1.3 За дужками
Як я вже говорив вище, для того, щоб стати професіоналом у галузі баз даних, потрібні роки. Професіонал знає купу всього, що ми не будемо вивчати. Але про те, що є в базах даних, я трохи розповім.
Майже всі сучасні бази даних підтримують:
1 Procedural Language (PL)
СУБД підтримують можливість писати процедури та функції, які виконуються на SQL-сервері та можуть багато чого робити з даними під час запитів. Наприклад, колись я писав запити на PL SQL до сервера Oracle, який у відповідь на запит генерував HTML-сторінку з даними. Так, можна й так.
2 Події (Triggers)
Усі сучасні СУБД підтримують механізм подій, що у мові SQL називаються тригерами. Тригер виникає як у відповідь якесь дію. Наприклад, можна перехоплювати всі спроби запису до бази і додавати в нові рядки точний час їх зміни.
3 Журналування (log)
Сучасні бази даних намагаються працювати супершвидко, тому часто всі зміни (нові рядки, видалені, змінені) спочатку записуються у спеціальний файл, журнал. І лише через якийсь час SQL-сервер поєднає ці записи з основною базою даних.
Чимось це схоже на поведінку Garbage Collector в Java: він теж спочатку просто позначає об'єкти як віддалені, а за простою виконує очищення та оптимізацію пам'яті.
4 Розширення (Plugins)
До СУБД, як і до багатьох програм, можна писати свої плагіни. Такі плагіни дозволяють додавати унікальні типи даних, функції для роботи з ними або змінювати стандартну поведінку СУБД. Таке буває особливо корисно, коли ти працюєш із СУБД із відкритим вихідним кодом і там є якісь баги.
5 Розподілена робота (кластери)
Типовий сценарій роботи сучасного SQL-сервера – це кластер із кількох серверів. Найпростіший варіант це коли дані пишуться на один сервер, а читаються з групи серверів. При цьому можна налаштовувати різні сценарії синхронізації баз даних між SQL-серверами.
6 Шардування
Коли даних дуже багато, їх починають розбивати з різних баз даних. Аж до того, що одна таблиця може зберігатися частинами у різних базах даних.
Шардування буває вертикальним та горизонтальним. Вертикальне шардування означає, що таблицю хіба що розрізають вертикальними лініями, а горизонтальне – по горизонтальним.
Наприклад, ми вирішабо всі дані в таблиці поділити за роками: для 2019 року одна таблиця, для даних 2020 року друга і так далі. Це буде горизонтальне шардування.
7 Впхнути невпихуемое
На певному етапі розвитку баз даних у них почали додавати дедалі більше бізнес-логіки. Все почалося з процедур, функцій, генерації web-сторінок серверами, а закінчилося тим, що в СУБД додали підтримку багатьох популярних мов: Python, JavaScript, і навіть Java і С++.
Звучить круто, доки не починаєш вивчати деталі: ти справді хочеш писати бізнес-логіку свого веб-додатку на Java, яка буде виконуватися всередині SQL-сервера, де немає JDK, java-бібліотек, фреймворків, мало пам'яті та ще купа обмежень?
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ