База данных Oracle DB: как она устроена и чем хороша
Разбираемся, как работает популярная СУБД от Oracle, какие у неё есть фишки и чем она отличается от других баз данных.
Иллюстрация: Clay Banks / Unsplash / Annie для Skillbox Media
Чтобы сайтам и приложениям было удобно работать с данными, используют СУБД — системы управления базами данных. О том, как они работают, мы писали в предыдущей статье. А сегодня будем препарировать СУБД от Oracle — всё ещё самую популярную базу данных в мире для энтерпрайза по версии TOPDB. Вот о чём поговорим в этой статье:
- Коротко: для чего нужны СУБД в целом
- Что такое Oracle Database
- Как она работает
- Из чего состоит
- В чём сила Oracle DB
- На каком языке пишут запросы
- Версии и редакции Oracle DB
- Почему она стала популярной
- Выводы: кому и зачем нужна Oracle DB сейчас
Коротко: для чего нужны СУБД
Всё, что вы видите в интернете, состоит из данных: текста, фотографий, мемов, постов, переписок и так далее. Чтобы облегчить себе жизнь, разработчики придумали хранить всю эту информацию в базах данных. Но сама по себе база данных мало что умеет — по сути, это текстовый файлик, лежащий на сервере.
Представьте, что вы пришли за какой-то книгой в библиотеку. Если просто начать кричать куда-то в стеллажи: «Дай мне „Гарри Поттера“», ничего не случится — разве что выйдет высоченный «товарищ» Джона Уика и придётся срочно искать томик русских народных сказок. Но если обратиться к библиотекарю, эффект будет гораздо лучше: он посмотрит каталог и быстро принесёт нужные книги.
Если переложить нашу аналогию на язык машин, то библиотекарь — это как раз система управления базами данных. И вот для чего она может пригодиться:
- добавлять в базу новые данные;
- искать данные по запросу пользователя;
- вносить в данные изменения;
- защищать базы данных от взлома и копирования;
- создавать резервные копии и восстанавливать данные после сбоя;
- сортировать данные с помощью фильтров и учитывая структуру БД.
А теперь займёмся нашей Oracle DB.
Что такое Oracle Database
Oracle DB — это культовая СУБД, разработанная ещё в семидесятые программистами Ларри Эллисоном и Бобом Майнером (которые, к слову, до этого работали на ЦРУ). Культовой её считают потому, что это первая коммерчески успешная СУБД, работающая по реляционной модели.
«Реляционная» означает, что все записи в базе данных упорядочены в виде таблиц. Раньше было не так: банки и крупные госучреждения хранили данные как попало — во множестве разных файликов без единой системы. Связи между файликами тоже не было — то есть если у какого-то клиента менялся, например, номер телефона, приходилось менять это вручную и сразу везде.
А тут пришли очкастые программисты из Oracle и, вооружившись модной тогда реляционной моделью, разложили всё по полочкам. А точнее, по таблицам. Идея в том, что таблицы в реляционных БД связаны между собой специальными ключами — если добавить или удалить что-то в одной, все остальные таблицы об этом узнают и сами обновятся.
Вот как выглядит реляционная база данных на примере университетской ведомости с оценками:
Обратите внимание: в таблице «Оценки за экзамены» нет данных о студентах и предметах — только ссылки на их ID. Если Вася Иванов, к примеру, перейдёт в другую группу, нам нужно будет поправить это только в одной таблице — «Студенты». Во всех остальных таблицах данные обновятся автоматически.
Со временем данные стали усложняться и простых записей в табличках стало не хватать. Поэтому Oracle добавила своей СУБД фишки объектной модели. Теперь появилась возможность хранить данные в виде объектов — сущностей, которые могут содержать много разных свойств и передавать их друг другу.
Например, вот как будет выглядеть та же самая база данных с оценками, если записи в ней организовать по объектной модели:
Формально Oracle DB правильнее называть объектно-реляционной СУБД. То есть она позволяет реализовать сразу два подхода: хочешь простой сайт или блог — используй реляционные таблички; нужна сложная логика для какой-нибудь ERP-системы — можно заморочиться с объектной структурой.
Как работает Oracle Database
В основе работы Oracle DB лежит клиент-серверная модель. Суть у неё простая:
- Есть сервер, где хранятся данные, и система, которая ими управляет.
- Есть клиент, который хочет эти данные получить или, наоборот, записать. В интернете клиентом выступает обычный браузер — он умеет превращать клики пользователей на сайте в серверные запросы.
Фишка клиент-серверной модели в том, что вся работа с данными вынесена на сервер — пользователю не нужно держать у себя на компьютере копию базы данных. Достаточно скачать приложение-клиент и пулять себе запросы к серверу в любое время дня и ночи, чтобы получить нужные мемы с котами.
На самом сервере тоже всё хитро: помимо данных, которые физически лежат на диске, есть ещё процессы, которые этими данными управляют. Набор всех процессов в СУБД Oracle DB называют экземпляром — по сути, это программная оболочка для файлов, которая существует только в оперативке сервера. Если выключить сервер из розетки, экземпляр удалится, а сами файлы с данными останутся.
Допустим, вы зашли на популярный маркетплейс, чтобы купить кроссовки. Вот как будет выглядеть серверная логика, если под капотом маркетплейса Oracle DB:
- Вы кладёте кроссовки в корзину и нажимаете кнопку «Купить».
- Ваш браузер посылает запрос о покупке на сервер.
- На сервере работает специальный драйвер Oracle Net Services — он видит запрос от браузера и выделяет под него отдельный процесс.
- Серверный процесс «звонит» экземпляру БД и говорит: «Эй, есть задачка от клиента, возьмёшь в работу асап?»
- Экземпляр такой: «Ага» — и запускает процесс записи в базу данных.
- В результате в базе данных появляется строчка «Пользователь ID №1 взял товар ID №2 в таком-то количестве».
- Когда запись закончена, сервер отправляет по сетям запрос обратно и вы видите сообщение «Спасибо за покупку!».
Всеми этими процессами, начиная от получения запроса на сервере и заканчивая отправкой ответа, как раз и управляет Oracle.
Структура базы данных Oracle
Как мы выяснили, СУБД Oracle состоит из двух сущностей: самой базы данных и её экземпляра. То есть из файлов на диске и процессов в оперативной памяти сервера. Вот чем они различаются:
База данных: файлы | Экземпляр: процессы |
---|---|
Файлы данных. Всё, что физически лежит в базе данных: картинки, текст, транзакции и так далее. Управляющий файл. Здесь хранится самая важная информация о БД: имя, время создания, расположение других файлов и так далее. Журналы активности. Всё, что происходит с БД: запись, чтение, удаление и так далее. Резервные копии. Чтобы можно было восстановиться в случае форс-мажоров | «Записать в базу данных». «Записать в журнал активности». «Создать резервную копию». «Восстановиться из резервной копии». «Поставить запрос в очередь». «Заархивировать данные в базе». «Провести диагностику данных». «Очистить кэш в буфере обмена». |
Мы не зря в этом разделе остановились на разнице между базой данных и экземпляром — именно в ней и заключается скрытая мощь Oracle DB.
Сила Oracle DB — в скорости и масштабируемости
Чтобы сайт быстрее обрабатывал запросы пользователей и лучше справлялся с нагрузкой, ему обычно докупают дополнительное серверное «железо» — в айтишном мире это называется масштабированием. И важно, чтобы эти серверы работали сообща — быстро, бесшовно и не мешая друг другу.
А в Oracle DB как раз есть утилиты, которые позволяют экземплярам на разных машинах работать с одной базой данных. Если упадёт один какой-то сервер, его работу подхватит другой и начнёт с того же места. Причём это произойдёт абсолютно незаметно для пользователя. Да что там сервер — если ваша БД крутится в нескольких дата-центрах, то выход из строя одного из них не скажется на работе всей БД.
То есть здесь мы убиваем сразу трёх зайцев: и скорость сайта повышаем, и страхуем себя на случай поломки, и обслуживание удешевляем — можно безболезненно отключить какой-то сервер, если он потребует ремонта.
За всю эту магию в Oracle DB отвечают три функции:
Oracle RAC. RAC в переводе с английского означает «кластеризация». Идея в том, что мы создаём кластер машин, работающих с одной БД.
Oracle Streams. Утилита, которая отвечает за обмен информацией между базами данных, она нужна, чтобы серверы работали синхронно.
Oracle Data Guard. Механика здесь простая: есть главный сервер, а есть вспомогательные, в которые периодически делаются бэкапы из главного.
На каком языке пишут запросы
Обычно запросы в реляционных СУБД пишут на языке SQL, эта аббревиатура так и расшифровывается — «язык структурированных запросов». С его помощью можно делать с данными в базе что угодно: добавлять, удалять, группировать, настраивать доступ для разных пользователей и так далее.
Например, если мы хотим посмотреть всех подписчиков Skillbox Media «Код», живущих в Москве, запрос на языке SQL будет выглядеть так:
Как видно из примера, SQL максимально похож на обычный человеческий язык: выбери то, достань это, положи сюда и так далее. Именно благодаря своей простоте и естественности SQL и стал популярен — сейчас ни одно действие в интернете не обходится без запросов на этом языке.
Но Oracle пошла дальше и выпустила свой диалект языка SQL — называется PL/SQL. Дословно это переводится как «процедурная надстройка для SQL». С его помощью можно собрать сразу много запросов в одном блоке кода и написать для них сложную логику поведения.
Например, так выглядит код для добавления книги в библиотечный каталог:
Версии и редакции Oracle DB
Всего за время существования Oracle DB вышло более 20 версий этой СУБД. Каждая новая версия знаменовала какую-то новую веху в становлении компьютеров: сначала добавили поддержку языка SQL, потом — разделение на клиент и сервер, чуть позже реализовали объектную модель и экземпляры. А в девяностые наконец доползли до интернета и веб-серверов.
Историю развития Oracle DB в версиях можно посмотреть на этом таймлайне:
Последняя версия под кодовым названием 21c вышла в 2021 году. Туда разработчики зашили целых 200 новых функций, среди которых поддержка блокчейна, языка JavaScript, JSON-пакетов, фишек для машинного обучения прямо в базе данных и других радостей. Подробнее обо всех нововведениях можно почитать в блоге компании.
Поставляется Oracle DB в четырёх редакциях:
- Standard Edition 2. Версия для небольших веб-приложений — многие функции урезаны или доступны за дополнительную плату.
- Enterprise Edition. Вариант для больших компаний, развивающих ресурсоёмкие проекты — например, банки и крупные маркетплейсы. Доступен полный набор фишек для масштабирования, включая RAC.
- Express Edition. Бесплатная версия, заточенная на скорость — можно быстро скачать, установить и сразу начать пользоваться. Правда, хранить можно всего 11 ГБ пользовательских данных.
- Personal Edition. Для разработчиков, которые хотят протестировать какие-то фишки у себя на компьютере, прежде чем внедрить их в проект.
Почему Oracle DB стала популярной
Секрет успеха Oracle в том, что компания одной из первых придумала, как сделать реляционные базы данных дешёвыми и по-настоящему массовыми. В отличие, например, от решний IBM, Oracle DB не требовала мощного железа и могла запускаться на совсем маленьких и бюджетных машинах вроде PDP-11.
Если добавить к этому поддержку клиент-серверной архитектуры, становится понятно, почему система полюбилась бизнесу. Ещё бы: ведь она позволила компаниям строить большие распределённые системы, которые работают на недорогих машинах, да ещё и обмениваются данными со скоростью света.
Со временем Oracle DB стала негласным стандартом в тех сферах, где важна стабильность при высокой нагрузке: госсектор, финансы, страхование и так далее. Например, Oracle используют почти все компании из списка Fortune 500 — а это и Apple, и Walmart, и Samsung, и куча других гигантов. Среди российских клиентов отметим Сбербанк, МТС, ЦБ РФ, Ростелеком.
Вот десятка самых популярных баз данных на май 2022 года — Oracle DB на первом месте с 32 процентами рынка:
Ложка дёгтя. Со временем популярность Oracle DB сыграла с компанией злую шутку. Клиентская база росла, затраты на поддержку тоже, и постепенно Oracle DB стала очень дорогим продуктом. Например, стоимость лицензии на сервер с 16-ядерным процессором может доходить до 1,6 млн рублей в год — а запустить полноценный дата-центр на Oracle DB вообще стоит целое состояние.
Выводы: кому и зачем нужна Oracle DB
Oracle DB — это флагман на рынке коммерческих баз данных. Благодаря скорости и безопасности она хорошо подходит для работы с высоконагруженными проектами, которые обрабатывают запросы миллионов пользователей. Обратная сторона — высокая стоимость обслуживания.
Если вы ищете базу данных для небольшого сайта или интернет-магазина, лучше присмотреться к похожим open-source-решениям — тем же MongoDB и PostgreSQL. Как правило, базовые функции там бесплатные, а расширенные докупить будет дешевле, чем накатить полноценную СУБД от Oracle.
Больше интересного про код в нашем телеграм-канале. Подписывайтесь!