Ко всем новостям

СУБД: что такое системы управления базами данных, классификация, виды, как работают современные СУБД

Технологии
04.03.2024

СУБД: система управления базами данных

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

Одной из типовых задач стала организация хранения данных, а сами приложения такого рода выделили в класс «системы управления базами данных».

Что такое СУБД

Это специализированное программное обеспечение, задача которого состоит в том, чтобы предоставлять доступ к данным.

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

Для чего нужны

Хранение — это самая важная задача, ради которой создавали СУБД. При этом оно может быть как постоянным (persistent), так и краткосрочным.

При постоянном хранении используется энергонезависимый носитель информации. В самых простых случаях это жесткий диск компьютера. Он обладает приемлемой скоростью доступа к данным и не «забывает» их в случае отключения питания.

В более сложных вариантах данные распределяют по нескольким дискам и даже серверам. База с постоянным хранением подойдет, например, для создания сервиса фотографий. Но бывают БД, которые используют только для обработки краткосрочной информации.

Например, в случае доставки СМС сохранять его содержимое не нужно: важно только учитывать факт отправки сообщения для последующего выставления счета.

Пока СМС обрабатывает оператор, оно может попадать в так называемые in-memory СУБД. Они отличаются тем, что держат всю информацию в оперативной памяти. Это ускоряет чтение и запись, что особенно важно, когда одновременно обрабатывают множество сообщений. А после передачи СМС этот факт фиксируют в СУБД с постоянным хранением информации.

Управление данными — это вторая задача системы. В нее входит добавление, изменение и удаление записей в базе данных. Интересно, что в зависимости от задачи обработка может реализовываться по-разному.

Например, некоторые виды такого ПО сохраняют полученные сведения навсегда. Возможность реального удаления данных разработчиками таких БД не предусмотрена. Как в этом случае стереть информацию? Обновлением, в котором объект помечается как удаленный, но фактически не исчезает. Такое решение потребляет больше места в хранилище, зато дает возможность проследить историю появления и изменения записей.

Управление правами и порядком доступа — это третья обязанность СУБД. Когда у сервиса много пользователей, нужно определить, кто и какие данные может изменять, что делать, если два клиента пытаются одновременно перезаписать одно и то же.

Также от хорошей системы ждут полного обеспечения безопасности всех данных во время их хранения и передачи. Это значит, что доступ к информации возможен только авторизованным пользователям. Еще сервис может поддерживать резервное копирование, шифрование и архивацию.

Классификация

У БД разное назначение, применение и характеристики, а потому и работают они тоже по-разному.

По расположению

Локальные — это те, что расположены на том же компьютере, с которого используются. Соответственно, такие типы служб чаще всего применяют для обучения или разработки.

Облачные предоставляются как сервис из дата-центра провайдера. Это очень удобно, поскольку такие решения позволяют на ходу увеличивать пространство для хранения и вычислительные мощности. Также они не требуют поддержки. Заботу об этом берет на себя провайдер услуги. Хорошим примером можно считать Platform V Pangolin.

По языку запросов

SQL (Structured Query Language) — один из старейших типов взаимодействия с базами. Его поддерживают все традиционные системы, такие как PostgreSQL, Oracle или Microsoft SQL. С одной стороны, этот язык универсален и позволяет на базовом уровне работать с любой традиционной СУБД. С другой — у каждой БД свой «диалект», и в общем случае SQL-запросы между СУБД непереносимы.

NoSQL в связи с недостатками традиционных решений построены на отрицании SQL. И здесь похожих реализаций уже значительно меньше. MongoDB ориентируется на полуструктурированную информацию и позволяет управлять ею с помощью объектно-ориентированных скриптов. Redis работает с парами «ключ – значение», а Neo4j — с графами. С одной стороны, принципы работы с ними стали специфичными для каждого решения, с другой — ориентация на конкретную задачу БД позволяет извлекать из нее максимум пользы.

По хранению и обработке данных и запросов

Централизованная база (например, PostgreSQL) хранит и обрабатывает информацию в одном месте. Распределенные БД (например, MongoDB) позволяют не только разносить ее по разным серверам, но еще и принимать и исполнять запросы в параллельном режиме. Также среди СУБД можно выделить те, что обеспечивают долговременное сохранение данных (персистентные), например, на диске или в NAS, и те, что работают только с оперативной памятью (in-memory).

По структуре и организации данных

Структура также определяется задачей, под которую создана та или иная СУБД.

Иерархические сервисы построены по принципу дерева, в котором информация имеет строгое подчинение, и путь до каждого элемента определяется через родительские узлы.

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

И иерархические, и сетевые базы уступили место реляционным. Это таблицы, которые могут ссылаться друг на друга. Именно для них подходит язык SQL (большинство современных промышленных сервисов являются именно такими).

Документоориентированные СУБД работают с полуструктурированными данными, такими как JSON. У них четкая структура, такие документы легко читаются. При этом формат не ограничивает ни содержимое документов, ни их «глубину» (вложенность элементов JSON).

Многие SaaS-сервисы предпочитают полагаться именно на эти БД, поскольку они естественным образом сохраняют настройки или информацию, которую обрабатывают. При этом, в отличие от традиционных, нет необходимости заранее размечать структуру.

Существуют и такие базы, которые построили на основе пар «ключ – значение». Самой известной его реализацией можно считать Redis. Интересно, что ее зачастую не применяют как СУБД в классическом понимании. Вместо этого на Redis строят брокеры сообщений или кэши.

Объектно-ориентированные службы (такие, как ObjectDB и db4o) используют совместно с бэкендами, построенными на базе объектно-ориентированных языков. Такие системы естественным образом реализуют полиморфизм, наследование и инкапсуляцию.

Например, ObjectDB поддерживает Java Persistence API (JPA) и Java Data Objects (JDO). Это удобно, однако ограничивает сферу применения таких СУБД привязкой к конкретной концепции и языку программирования.

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

Постепенно набирает пользовательскую базу новый формат под названием «семейство столбцов» (wide-column). Как и в реляционных БД, данные хранят в строках и столбцах. Но если в РБД информацию укладывают в последовательные строки с полным набором значений по столбцам, то в wide-column ее группируют по колонкам. Строке совершенно необязательно иметь полный набор данных. Такие СУБД нашли свое применение как системы хранения логов и оперативной аналитики больших объемов информации.

Из чего состоит

Несмотря на вариативность назначения и реализации систем существует принципиальная структурная схожесть. В любой БД можно выделить:

  1. Ядро. Отвечает за реализацию управления данными.
  2. Интерпретатор запросов. Так или иначе, БД нужно взаимодействовать со своими клиентами. При этом для пользователей-людей и программ предлагают один и тот же язык, удобный для чтения человеку.
  3. Оптимизатор запросов. Ищет самый быстрый путь их выполнения, тем самым повышает производительность.
  4. Менеджер транзакций. Управляет параллельным доступом пользователей и отвечает за соблюдение контракта, который своим клиентам предложила система. Традиционным считается выполнение требований ACID (атомарность, согласованность, изоляция и устойчивость).
  5. Контроль доступа. Обеспечивает безопасность данных за счет проверки привилегий пользователей.
  6. Интерфейс клиента и администратора. Можно применять как для работы с различной информацией, так и для настройки параметров.
  7. Система хранения. Реализует сбережение данных на носителе. Иногда в ее состав входит кеширование, которое ускоряет доступ к информации.

Конкретную реализацию каждой из этих подсистем определяет основная задача, которую должно решать ПО.

Варианты, которые выбрали разработчики, позволили создать как специализированные базы для маломощных вычислительных систем, так и решения для работы с большими неструктурированными данными (big data).

Как работает

Обычно базу размещают на отдельном сервере или используют как сервис. Поэтому первый этап работы — это прием входящих запросов на соединение. Во время подключения аутентифицируют пользователя и наделяют его привилегиями.

Далее БД получает запрос от клиента, чаще всего сформулированный на человекочитаемом языке. Принятый запрос проходит проверку на корректность и возможность его исполнить. Затем СУБД готовит план его выполнения с использованием оптимизатора. Если запрос выполняют в рамках транзакции, то информацию, которую будут затрагивать во время исполнения, защищают от изменения извне.

После исполнения запроса клиенту, который его подал, возвращают ответ. Это могут быть как данные, так и просто уведомление о результате операции.

После завершения работы клиент отключается от сервера, а база освобождает зарезервированные под него ресурсы. При этом в фоновом режиме система может делать технические операции, такие как индексация данных для быстрого доступа к ним, оптимизация размещения информации или ее резервное копирование.

Современные сервисы

Вариантов баз очень много. Какую использовать для конкретного проекта, зависит от характера информации, которую нужно хранить или обрабатывать, а также от цели работы сервиса.

В пятерке лидеров — четыре «традиционных» БД: Oracle, MySQL, Microsoft SQL Server и PostgreSQL. И только пятая по популярности — это NoSQL MongoDB. За ней следуют Redis и ElasticSearch.

NoSQL пока отстают от традиционных по проникновению, но благодаря специализации и смещению акцента в пользу обработки неструктурированных данных число потребителей растет.

На фоне этого появляются новые типы сервисов, такие как NewSQL, которые пытаются совместить преимущества классических SQL-систем и новых NoSQL.

Сейчас рынок СУБД очень разнообразен, и выбор предложений, скорее всего, в ближайшие годы будет только увеличиваться.