Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Oracle — самая популярная база данных в мире. Благодаря функциональности ее используют в enterprise-разработке масштабных и сложных проектов. Разработчики компании DST Global расскажут все о ее преимуществах, недостатках и возможностях.
Oracle Database занимает почти треть рынка. Это положение ей обеспечила как долгая история, так и умение разработчиков идти в ногу со временем. Начинающим программистам, которые хотят работать в крупных компаниях, стоит иметь хотя бы общее представление о ее продукте, а бэкендерам не помешает опыт практической работы с ним.
Базы данных и СУБД
Для начала разберемся в основах — зачем вообще нужны базы данных. Современные приложения хранят много информации. Например, в стандартном интернет-магазине это будет список товаров и покупателей. Все это находится в базах данных. Проще всего представить их в виде огромных таблиц. К ним обращается бэкенд приложения, когда необходимо получить информацию.
Для работы с ней используют СУБД — системы управления базами данных. СУБД служит своеобразным классификатором и помогает искать информацию. С их помощью можно добавлять и удалять данные, изменять их, искать по запросам, сортировать и совершать другие действия. Oracle — одна из старейших СУБД, которая получила огромный коммерческий успех.
История Oracle
Ее разработка началась в конце 1970-х годов. Отцом Oracle стал Ларри Эллисон, талантливый программист, который вместе с двумя коллегами, Бобом Майнером и Эдом Оэйтсом, основал компанию под названием Software Development Laboratories (SDL) в 1977 году. Они задались целью создать программное обеспечение, способное эффективно управлять большими объемами данных, что было особенно актуально на фоне стремительно развивающегося рынка IT.
Вдохновение для создания СУБД Oracle Эллисон и его команда черпали из научной работы сотрудника IBM Эдгара Кодда, который в 1970 году предложил концепцию реляционной базы данных. Кодд описал метод организации данных в виде таблиц, что должно было обеспечить удобство работы с большими массивами информации. Эллисон решил воплотить эту идею в коммерческом продукте.
Первая версия Oracle, известная как Oracle Version 2, вышла в 1979 году. Интересно, что предыдущая версия никогда не выпускалась официально, так как разработчики сочли ее слишком сырой для использования. Oracle Version 2 была первой коммерческой реляционной СУБД, работавшей по концепции Кодда. Она быстро завоевала популярность, так как предлагала масштабируемость и надежность, что привлекало крупные компании.
В дальнейшем разработчики закрепили успех, активно внедряя инновации. Например, Oracle Version 3, выпущенная в 1983 году, стала первой СУБД, поддерживающей язык SQL, который позже стал стандартом для работы с реляционными базами данных. Поддержка языка запросов SQL позволила легко создавать и управлять сложными БД. Кроме того, новая версия стала кроссплатформенной, что дало ей возможность работать на разных операционных системах и аппаратных платформах. Это было огромным преимуществом перед конкурентами, так как бизнес мог использовать Oracle без привязки к оборудованию.
Со временем она превратилась в одну из ведущих СУБД в мире, занимая лидирующие позиции на рынке благодаря своей надежности, производительности и постоянным инновациям. Сегодня Oracle используют в самых разных отраслях — от банковской сферы до государственного управления.
Особенности Oracle
Эта СУБД имеет несколько ключевых особенностей, многие из которых были реализованы в ней впервые в рамках коммерческого продукта.
Реляционная и объектно-ориентированная модель
Это два подхода к хранению и управлению данными, каждый из них реализован в Oracle. В основе реляционной модели лежит хранение данных в виде таблиц. Каждая таблица состоит из совокупности строк и столбцов. Строки называют записями, а столбцы — полями.
Важная особенность реляционной модели — связь данных между собой через ключи, что позволяет легко выполнять сложные запросы и анализировать информацию. Например, при помощи такого запроса можно сделать выборку всех клиентов интернет-магазина, которые сделали покупку за определенный месяц. Oracle поддерживает реляционную модель, что позволяет базе эффективно управлять большими объемами структурированных данных.
Объектно-ориентированная модель добавляет к реляционной новые возможности, позволяя объединять данные и методы в единые структуры — объекты. Они могут наследовать свойства и поведение от других объектов, что упрощает разработку и поддержку сложных приложений. Например, в Oracle можно создать объекты, которые представляют реальные сущности, такие как клиенты или заказы, и определить методы для работы с этими объектами. Такой подход делает систему мощнее и гибче, что позволяет лучше структурировать информацию.
Клиент-серверная архитектура
Oracle построена по принципу распределения функций между клиентом (пользователем) и сервером (центральным узлом). В клиент-серверной архитектуре сервер отвечает за управление данными, их хранение и выполнение запросов. Клиентский компонент предоставляет пользователю интерфейс для взаимодействия с базой данных.
В Oracle сервер выполняет основную работу по обработке данных, обеспечивая их целостность и безопасность. Клиенты, в свою очередь, могут находиться на разных компьютерах и взаимодействовать с сервером через сеть. Такая архитектура позволяет эффективно распределять нагрузку и работать с большими объемами данных в реальном времени.
Как работает Oracle
Информацию в этой базе данных хранят в инстансах — их еще называют экземплярами базы данных. Расскажем об этом подробнее.
Инстанс (Instance)
Инстанс в Oracle — набор процессов и оперативной памяти, обеспечивающих доступ к данным, хранящимся в базе. Проще говоря, это то, что «оживляет» базу данных, позволяя пользователям и приложениям взаимодействовать с ней.
Когда вы запускаете Oracle, создается инстанс, который загружает данные из файлов на диске в оперативную память и начинает управлять ими.
Инстанс можно представить как офисного сотрудника, получающего инструкции (запросы) от начальства (пользователей), обрабатывающего их и возвращающего результат. В случае с Oracle инстанс получает запросы на доступ к данным, например, для чтения или изменения информации, выполняет их и отправляет ответ обратно пользователю.
Внутри экземпляров находятся логические пространства, в которых хранят все компоненты данных. Это файлы с расширением .dbf.
Табличные пространства (Tablespaces)
Это логическая структура, которую используют для организации хранения данных. Вся информация находится именно в них. Табличные пространства могут состоять из одного или нескольких файлов на диске. Tablespaces позволяют удобно управлять размещением данных, их размерами и производительностью.
Если представить базу данных в виде огромного архива, то табличные пространства — это его отделы. В каждом отделе (tablespace) лежат определенные типы файлов (данных).
Например, в одном tablespace в базе данных интернет-магазина — информация о клиентах, в другом — платежные данные, а в третьем — адреса. Это помогает систематизировать хранение.
СУБД может работать с независимыми базами в рамках одного инстанса или с мультиарендной архитектурой, которая позволяет одному инстансу управлять несколькими клиентами.
Кластеризация
Представьте себе библиотеку, где книги расставлены по жанрам. Если часто нужны книги одного жанра, удобнее, когда они находятся на одной полке, а не разбросаны по всему залу. Так работает и кластеризация в Oracle.
В Oracle кластеризация позволяет объединить несколько таблиц в единый кластер, в котором информацию хранят по определенному ключу. Это полезно, когда часто выполняют запросы на извлечение данных из нескольких связанных таблиц одновременно.
Допустим, у вас есть две таблицы: одна с данными о заказах, другая — с информацией о клиентах. Кластеризация позволит хранить записи о заказах и клиентах с одинаковыми идентификаторами рядом, что упростит и ускорит выполнение запросов, связывающих эти таблицы.
Секционирование
Это метод разделения больших таблиц или индексов на более мелкие, управляемые части, называемые секциями (partitions). Каждая секция хранит определенный диапазон данных. Секционирование полезно для работы с очень большими таблицами, содержащими миллионы записей.
Секции создают на основе разных критериев: даты, числовых диапазонов или списков значений. Например, если в интернет-магазине есть таблица с информацией о продажах за несколько лет, можно создать секции для каждого года. Когда нужно будет получить данные только за один год, Oracle сможет обратиться только к соответствующей секции, что значительно ускорит выполнение запроса.
Основные модули
Oracle — это многофункциональная СУБД, в которую входит целый ряд дополнительных компонентов и модулей. Они способны решать разные задачи — от автоматизации бизнес-процессов до управления мультимедийными данными. Рассмотрим основные модули Oracle и их функции.
Workflow
Инструмент для автоматизации и управления бизнес-процессами. С его помощью можно моделировать, выполнять и контролировать процессы, которые проходят в организации. Oracle Workflow позволяет интегрировать другие приложения и системы.
Например, с его помощью можно создать автоматизацию процесса согласования заказа. Когда сотрудник создает заказ на поставку, система автоматически запускает процесс согласования, включающий уведомление соответствующих лиц, проверку наличия средств и утверждение заказа. Этапы процесса отслеживаются и управляются через Workflow, что делает его прозрачным и контролируемым.
InterMedia
Модуль, добавляющий возможность работы с мультимедийными данными: изображениями, аудио и видео. Он дает возможность хранить, обрабатывать и управлять этими объектами прямо в БД.
Этот функционал интересен интернет-магазинам, которым нужно хранить фотографии и видеоролики с товарами. За счет него эти файлы будут интегрированы в базу данных и доступны для быстрого поиска и обработки.
Advanced Replication Option
Его используют, чтобы организовать репликацию данных между несколькими базами Oracle. Репликация — процесс копирования и синхронизации информации между разными БД для согласованности.
Например, если у компании есть филиалы и каждый ведет собственную базу, с помощью модуля можно организовать репликацию данных между ними. Это позволит сделать информацию о заказах и клиентах доступной из каждого филиала.
Objects for OLE
Набор инструментов для интеграции баз данных Oracle с приложениями, использующими технологию OLE (Object Linking and Embedding) от Microsoft. Модуль позволяет разработчикам создавать приложения на основе C++, Visual Basic и других технологий.
С ним можно, например, написать приложение на базе Microsoft Excel, которое автоматически извлечет информацию из БД и отобразит ее в виде таблиц и диаграмм. Это актуально для создания отчетов и аналитических материалов.
Enterprise Manager
Ключевой инструмент для администрирования и мониторинга баз данных Oracle. Он предоставляет администраторам баз данных (DBA) удобный интерфейс для управления — от настройки параметров до мониторинга производительности и выполнения резервного копирования.
С помощью Oracle Enterprise Manager администратор может контролировать нагрузку на сервер, следить за выполнением запросов, настраивать параметры производительности и гарантировать безопасность данных.
Инструмент позволяет автоматизировать рутинные задачи, такие как создание резервных копий и восстановление БД, что делает управление эффективнее и надежнее.
Data Guard
Решение для организации доступности и защиты данных. Оно позволяет создавать и управлять репликами БД (standby databases), которые применяют для аварийного восстановления в случае сбоя основной базы.
Real Application Clusters (RAC)
Инструмент, позволяющий распределить нагрузку на несколько серверов, объединенных в кластер. Она обеспечивает доступность и масштабируемость базы данных, так как при выходе из строя одного из серверов его функции автоматически берут на себя остальные серверы в кластере.
Text
Инструмент поиска и анализа текстовых данных в БД. Он помогает индексировать текстовые документы, осуществлять полнотекстовый поиск, а также анализировать содержание документов.
Это полезно для баз с юридической информацией. Через Oracle Text можно быстро находить нужные документы по ключевым словам или фразам.
ASM (Automatic Storage Management)
Модуль для автоматического управления дисковым пространством. Он упрощает управление хранилищами данных, обеспечивая высокую производительность и отказоустойчивость.
Преимущества и недостатки Oracle
В качестве заключения поговорим об основных плюсах и минусах этой СУБД.
Преимущества:
- Масштабируемость и производительность. Oracle обеспечивает высокую производительность даже при работе с очень большими объемами данных. Систему легко масштабировать, что позволяет увеличивать ее мощность при расширении бизнеса. Благодаря технологии RAC БД может работать на нескольких серверах, что повышает доступность и позволяет распределять нагрузку.
- Отказоустойчивость. Oracle обеспечивает высокую надежность и защиту данных. Data Guard позволяет создавать резервные копии и переключаться на них в случае сбоя. Это минимизирует риск потери информации и простоев.
- Безопасность. СУБД дает все возможности для информационной безопасности. В системе реализуют передовые методы шифрования, управления доступом и мониторинга действий пользователей. Это актуально для компаний, работающих с конфиденциальной информацией.
- Многофункциональность. Oracle предлагает множество дополнительных модулей и инструментов, позволяющих адаптировать систему под конкретные нужды бизнеса.
- Кроссплатформенность. СУБД поддерживает все операционные системы и аппаратные платформы, что делает ее универсальной. Она может работать на Windows, Linux, Unix и других системах, что упрощает интеграцию в существующую ИТ-инфраструктуру.
- Мощные инструменты для администрирования. Oracle Enterprise Manager предоставляет администратору удобный интерфейс для управления базой данных. С его помощью можно мониторить производительность, настраивать параметры и автоматизировать рутинные задачи, такие как создание резервных копий и восстановление данных.
Но и недостатки у этой СУБД тоже есть. Вот основные:
- Сложность настройки и администрирования. Oracle — мощная и сложная система, требующая высокой квалификации от администратора. Навыки настройки, оптимизации и управления базой данных дорого стоят на рынке труда.
- Требовательность к ресурсам. Oracle потребляет значительные вычислительные ресурсы, особенно в больших установках. Для обеспечения высокой производительности может потребоваться мощное оборудование, что увеличивает затраты на инфраструктуру.
- Длительное обучение. Поскольку Oracle предлагает множество функций и возможностей, для полного освоения системы требуется значительное время. Это может быть препятствием для организаций, которые хотят быстро внедрить эту базу данных.
В целом Oracle по мнению разработчиков DST Global — мощный и эффективный инструмент для управления базами данными. Это самое популярное решение на рынке с обширными возможностями для бизнеса.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117
Задать вопрос по почте
Победителем в номинации «лавкрафтовские ужасы» заслуженно стал рассказ бывшего разработчика Oracle, который работал над Oracle Database в период разработки версии 12.2. Объем кодовой базы СУБД на тот момент составлял 25 миллионов строк на языке C — и стоило вам изменить лишь одну из этих строк, как ломались тысячи написанных ранее тестов.
За прошедшие годы над кодом успело потрудиться несколько поколений программистов, которых регулярно преследовали жесткие дедлайны — и благодаря этому код смог превратиться в настоящий кошмар. Сегодня он состоит из сложных «кусков» кода, отвечающих за логику, управление памятью, переключение контекстов и многое другое; они связаны друг с другом при помощи тысяч различных флагов. Весь код связан между собой загадочным макросом, который невозможно расшифровать, не прибегая к помощи тетради, в которую приходится записывать, чем занимаются релевантные части макроса. В итоге, у разработчика может уйти день или два только на то, чтобы разобраться, чем же в действительности занимается макрос.
Для того, чтобы предсказать поведение кода в том или ином случае, приходится разбираться и запоминать, какие значения и последствия могут иметь 20 (а то и сотня) флагов. Ситуацию ухудшает тот факт, что различные разработчики использовали свои собственные типы, которые по своей сути представляли собой одно и то же (например, int32) — и едва ли кто-то рискнет тронуть подобное легаси (можно точно сказать, что это имело место быть в кодовой базе Oracle 8i).
Возникает вопрос: каким же образом при всем этом Oracle Database до сих пор удается держаться на ногах? Секрет — в миллионах тестов. Их полное выполнение может занимать от 20 до 30 часов (при этом выполняются они распределенно на тестовом кластере из 100-200 серверов).
В команде, которая работала над продуктом в конце 90-ых и придерживалась идей TDD (test-driven development), бытовало следующее мнение: «автоматизированные тесты означают то, что вы не обязаны писать код, который можно будет понять – вместо этого за вас должны думать тесты». В дальнейшем разработчики были вынуждены придерживаться заложенных ими принципами, и теперь мы на практике наблюдаем, чем обернулась эта идея в долгосрочной перспективе — со всеми ее плюсами и минусами.
Сегодня процесс исправления нового бага в Oracle Database занимает от нескольких недель до нескольких месяцев. Сначала разработчику приходится тратить несколько дней только на то, чтобы разобраться с нужными ему флагами (загадочное взаимодействие которых и вызывает баг), после чего ему зачастую приходится добавлять свой собственный флаг, который будет отвечать за обработку конкретного сценария, вызывавшего баг.
Затем он отправляет код на тестирование, и на следующий день спокойно переключается на другую задачу, ожидая, пока тестовый кластер соберет новую сборку Oracle DB и прогонит на ней все тесты. Если разработчику повезло, «покраснеет» примерно 100 тестов; если нет (и этот вариант случается чаще) — около 1000, и ему придется проверять, какое из его предположений о работе существующего кода оказалось неверным; вполне возможно, что он обнаружит, что ему требуется изучить еще десяток различных флагов, которые неочевидным образом принимали участие в работе кода, который он изменил.
Этот процесс ему придется повторять в течении пары недель, прежде чем ему наконец не улыбнется удача и все тесты наконец-то пройдут. После чего он сам должен будет написать несколько десятков тестов — для того, чтобы убедиться, что разработчик, который потревожит его код в будущем, не поломает его «фикс». Затем доработки отправятся на ревью, которое может занимать от нескольких недель до пары месяцев, после чего баг наконец-то будет смержен в главную рабочую ветку.
В силу того, что на сборку СУБД и выполнение тестов уходит не менее суток, ожидается, что каждый разработчик работает одновременно над 2-3 багами и переключается между ними, пока ждет результатов тестирования.
Если вы подумали, что жизнь разработчиков, добавляющих в СУБД новый функционал, легче – то это вы зря. Добавление даже небольшой новой фичи вроде нового режима аутентификации может занимать от 6 месяцев до года, в особо запущенных случаях — до двух лет.
В описанном случае, TDD позволяет не рассыпаться «спагетти»-коду, в котором уже крайне сложно что-то понять, и иметь на выходе рабочий продукт. При этом, издержки продолжают расти, и качество нового кода часто оставляет желать лучшего. Над СУБД работает не только команда разработчиков из США, но и команда из Индии, поэтому некоторые разработчики Oracle по сложившейся традиции сваливают вину за качество кода на них. Другие с ними не согласны, и основываясь на changelog заявляют, что качество кода не зависит от географии команды, и плохой код периодически «прилетает» от обеих команд. По-настоящему серьезная проблема для продукта — это разработчики, которые воспринимают проект как «вход в индустрию», и работают над СУБД не дольше 1-2 года; за это время существенно разобраться в тонкостях работы проекта невозможно.
По свидетельствам другого разработчика, который занимался портированием кодовой базы Oracle 8i на одну из версий Unix в конце 90-ых, код уже на тот момент представлял собой клубок «спагетти», который понять целиком было решительно невозможно. Еще один разработчик, который работал с кодом СУБД в конце 80-ых, утверждает, что тогда кодовая база представляла собой огромную кучу из исходников на C и набора makefile для сборки — многие из которых были устроены гораздо сложнее, чем код самого ядра. Конечно, стоит быть реалистами — едва ли ситуация обстоит лучше в аналогичных продуктах-лидерах индустрии, разработка которых велась в течение нескольких десятков лет.
Такой продукт сейчас — заложник себя самого. Переписать с сохранением всех фич такое невозвожно за разумное время. Приходится жить с чем есть.