Перейти к основному содержимому

4.10. Взаимодействие программ с БД

Разработчику Аналитику Тестировщику
Архитектору Инженеру

Взаимодействие программ с БД

Общий алгоритм

Алгоритм взаимодействия любой программы с БД всегда такой:

  1. Подключение к СУБД:
    • программа устанавливает соединение с сервером СУБД;
    • указываются параметры подключения: адрес сервера, порт, имя пользователя, пароль;
    • если подключение успешно, программа получает доступ к управлению базой данных.
  2. Соединение с конкретной БД:
    • после подключения к СУБД программа выбирает конкретную базу данных для работы;
    • для этого используется указание имени базы данных или выбор из списка доступных.
  3. Авторизация и аутентификация:
    • проверяются права доступа пользователя к выбранной базе данных;
    • определяется уровень привилегий - чтение, запись, изменение структуры.
  4. Старт транзакции:
    • если операции требуют целосности данных (например, обновление нескольких таблиц), программа начинает транзакцию;
    • транзакция гарантирует, что все изменения будут применены только в случае успешного завершения всех шагов.
  5. Выполнение запроса:
    • программа формирует и отправляет запрос к БД;
    • запрос может быть простым (выборка SELECT) или сложным (вычисления, объединения таблиц, агрегатные функции);
    • нужно правильно составить SQL-запрос, учитывая логику программы и структуру базы данных;
    • запрос может возвращать огромное количество строк, которые нужно обработать;
    • часть данных может потребоваться для дальнейших расчётов в программе, что усложняет интеграцию;
    • необходимо обрабатывать ошибки, такие как синтаксические ошибки в запросе, отсутствие данных или нарушение целостности.
  6. Чтение результата:
    • программа получает ответ от базы данных;
    • результат может быть представлен в виде набора строк, значений или сообщения об ошибке;
    • данные преобразуются в формат, понятный программе (объекты или массивы).
  7. Завершение транзакции:
    • если запрос выполнен успешно, транзакция фиксируется (COMMIT);
    • в случае ошибки транзакция откатывается (ROLLBACK), чтобы сохранить целостность данных.
  8. Закрытие соединения с БД:
    • после завершения работы программа закрывает соединение с базой данных;
    • это освобождает ресурсы сервера и предотвращает утечки памяти.

Схематично:

image.png


Особенности взаимодействия

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

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

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


Подходы

Какие же подходы используются в приложениях?

Прямые запросы

Программа напрямую формирует и отправляет SQL-запросы к базе данных. Здесь имеется полный контроль над запросами, возможность оптимизации, но недостатки данного подхода – это высокая сложность формирования запросов и необходимость ручной обработки данных. Буквально в коде это создание, к примеру, переменной типа String со значением запроса - «SELECT * FROM table» и отправка этого значения в базу.

image-1.png


Использование посредников

Программа при этом использует библиотеки или фреймворки для взаимодействия с базой данных. Эти инструменты предоставляют готовые методы для выполнения стандартных операций (CRUD).

image-2.png


Интеграции через API

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

image-3.png


ORM (Object-Relational Mapping) - объектно-реляционная модель.

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

image-4.png


Взаимодействие СУБД с программами и приложениями

Как СУБД взаимодействует с программами и приложениями?

  1. Приём запросов. СУБД принимает запросы от программ через сетевое соединение или локальный интерфейс. Запросы могут быть отправлены в виде текстовых команд (SQL) или через специализированные протоколы.
  2. Обработка запросов. СУБД анализирует запрос, проверяет синтаксис и права доступа. Запрос выполняется на основе внутренних алгоритмов СУБД (например, использование индексов, оптимизация планов выполнения).
  3. Возврат результатов. СУБД формирует ответ на запрос и отправляет его программе. Результат может быть представлен в виде таблицы, скалярного значения или сообщения об ошибке.
  4. Управление ресурсами. СУБД следит за использованием памяти, процессора и дискового пространства. Она также управляет параллельными запросами, чтобы избежать конфликтов.
  5. Логирование и мониторинг. СУБД записывает информацию о выполнении запросов, чтобы можно было анализировать производительность и выявлять проблемы.