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-библиотек, фреймворков, мало памяти и еще куча ограничений?


Установка MySQL и Workbench