Код
#статьи

База данных Oracle DB: как она устроена и чем хороша

Разбираемся, как работает популярная СУБД от Oracle, какие у неё есть фишки и чем она отличается от других баз данных.

Иллюстрация: Clay Banks / Unsplash / Annie для Skillbox Media

Чтобы сайтам и приложениям было удобно работать с данными, используют СУБД — системы управления базами данных. О том, как они работают, мы писали в предыдущей статье. А сегодня будем препарировать СУБД от Oracle — всё ещё самую популярную базу данных в мире для энтерпрайза по версии TOPDB. Вот о чём поговорим в этой статье:


Коротко: для чего нужны СУБД

Всё, что вы видите в интернете, состоит из данных: текста, фотографий, мемов, постов, переписок и так далее. Чтобы облегчить себе жизнь, разработчики придумали хранить всю эту информацию в базах данных. Но сама по себе база данных мало что умеет — по сути, это текстовый файлик, лежащий на сервере.

Представьте, что вы пришли за какой-то книгой в библиотеку. Если просто начать кричать куда-то в стеллажи: «Дай мне „Гарри Поттера“», ничего не случится — разве что выйдет высоченный «товарищ» Джона Уика и придётся срочно искать томик русских народных сказок. Но если обратиться к библиотекарю, эффект будет гораздо лучше: он посмотрит каталог и быстро принесёт нужные книги.

Если переложить нашу аналогию на язык машин, то библиотекарь — это как раз система управления базами данных. И вот для чего она может пригодиться:

  • добавлять в базу новые данные;
  • искать данные по запросу пользователя;
  • вносить в данные изменения;
  • защищать базы данных от взлома и копирования;
  • создавать резервные копии и восстанавливать данные после сбоя;
  • сортировать данные с помощью фильтров и учитывая структуру БД.

А теперь займёмся нашей Oracle DB.

Что такое Oracle Database

Oracle DB — это культовая СУБД, разработанная ещё в семидесятые программистами Ларри Эллисоном и Бобом Майнером (которые, к слову, до этого работали на ЦРУ). Культовой её считают потому, что это первая коммерчески успешная СУБД, работающая по реляционной модели.

Создатели базы данных Oracle DB через год после запуска первой версии СУБД
Фото: Computer History Museum

«Реляционная» означает, что все записи в базе данных упорядочены в виде таблиц. Раньше было не так: банки и крупные госучреждения хранили данные как попало — во множестве разных файликов без единой системы. Связи между файликами тоже не было — то есть если у какого-то клиента менялся, например, номер телефона, приходилось менять это вручную и сразу везде.

А тут пришли очкастые программисты из Oracle и, вооружившись модной тогда реляционной моделью, разложили всё по полочкам. А точнее, по таблицам. Идея в том, что таблицы в реляционных БД связаны между собой специальными ключами — если добавить или удалить что-то в одной, все остальные таблицы об этом узнают и сами обновятся.

Вот как выглядит реляционная база данных на примере университетской ведомости с оценками:

Изображение: Skillbox Media

Обратите внимание: в таблице «Оценки за экзамены» нет данных о студентах и предметах — только ссылки на их ID. Если Вася Иванов, к примеру, перейдёт в другую группу, нам нужно будет поправить это только в одной таблице — «Студенты». Во всех остальных таблицах данные обновятся автоматически.

Со временем данные стали усложняться и простых записей в табличках стало не хватать. Поэтому Oracle добавила своей СУБД фишки объектной модели. Теперь появилась возможность хранить данные в виде объектов — сущностей, которые могут содержать много разных свойств и передавать их друг другу.

Например, вот как будет выглядеть та же самая база данных с оценками, если записи в ней организовать по объектной модели:

Изображение: Skillbox Media

Формально 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 будет выглядеть так:

select * from Subscribers // выбрать из таблицы «Подписчики»  
WHERE City = 'Moscow'// читателей, живущих в Москве. 

Как видно из примера, SQL максимально похож на обычный человеческий язык: выбери то, достань это, положи сюда и так далее. Именно благодаря своей простоте и естественности SQL и стал популярен — сейчас ни одно действие в интернете не обходится без запросов на этом языке.

Но Oracle пошла дальше и выпустила свой диалект языка SQL — называется PL/SQL. Дословно это переводится как «процедурная надстройка для SQL». С его помощью можно собрать сразу много запросов в одном блоке кода и написать для них сложную логику поведения.

Например, так выглядит код для добавления книги в библиотечный каталог:

SQL> 
DECLARE isbn NUMBER(9)
BEGIN
   isbn := 123456789;
   insert into book values (isbn, 'databases', 59.99);
   COMMIT;
END;
SQL>

Версии и редакции Oracle DB

Всего за время существования Oracle DB вышло более 20 версий этой СУБД. Каждая новая версия знаменовала какую-то новую веху в становлении компьютеров: сначала добавили поддержку языка SQL, потом — разделение на клиент и сервер, чуть позже реализовали объектную модель и экземпляры. А в девяностые наконец доползли до интернета и веб-серверов.

Историю развития Oracle DB в версиях можно посмотреть на этом таймлайне:

Инфографика: Майя Мальгина для Skillbox Media

Последняя версия под кодовым названием 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.

Фото: Kenneth Martin / Flickr

Если добавить к этому поддержку клиент-серверной архитектуры, становится понятно, почему система полюбилась бизнесу. Ещё бы: ведь она позволила компаниям строить большие распределённые системы, которые работают на недорогих машинах, да ещё и обмениваются данными со скоростью света.

Со временем Oracle DB стала негласным стандартом в тех сферах, где важна стабильность при высокой нагрузке: госсектор, финансы, страхование и так далее. Например, Oracle используют почти все компании из списка Fortune 500 — а это и Apple, и Walmart, и Samsung, и куча других гигантов. Среди российских клиентов отметим Сбербанк, МТС, ЦБ РФ, Ростелеком.

Вот десятка самых популярных баз данных на май 2022 года — Oracle DB на первом месте с 32 процентами рынка:

Самые популярные базы данных в мире на май 2022 года
Инфографика: Майя Мальгина для Skillbox Media

Ложка дёгтя. Со временем популярность Oracle DB сыграла с компанией злую шутку. Клиентская база росла, затраты на поддержку тоже, и постепенно Oracle DB стала очень дорогим продуктом. Например, стоимость лицензии на сервер с 16-ядерным процессором может доходить до 1,6 млн рублей в год — а запустить полноценный дата-центр на Oracle DB вообще стоит целое состояние.

Выводы: кому и зачем нужна Oracle DB

Oracle DB — это флагман на рынке коммерческих баз данных. Благодаря скорости и безопасности она хорошо подходит для работы с высоконагруженными проектами, которые обрабатывают запросы миллионов пользователей. Обратная сторона — высокая стоимость обслуживания.

Если вы ищете базу данных для небольшого сайта или интернет-магазина, лучше присмотреться к похожим open-source-решениям — тем же MongoDB и PostgreSQL. Как правило, базовые функции там бесплатные, а расширенные докупить будет дешевле, чем накатить полноценную СУБД от Oracle.

Больше интересного про код в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована