Научные труды

Источник: Сборник материалов VII Международной научно-технической конференции «Современные информационные технологии в образовании и научных исследованиях» (СИТОНИ-2021). — 2021. — С. 334-337.


УДК 004.9

ТЕСТИРОВАНИЕ И АНАЛИЗ СРЕДСТВ ВЗАИМОДЕЙСТВИЯ С БАЗОЙ ДАННЫХ ПРИ ПРОЕКТИРОВАНИИ КЛИЕНТ-СЕРВЕРНОГО ПРИЛОЖЕНИЯ

Трушкин М.И., Бондаренко М.Р., Коломойцева И.А
ГОУ ВПО «Донецкий национальный технический университет» (г. Донецк) кафедра программной инженерии
e-mail: kamitrushkin@gmail.com, megandoe33@gmail.com, bolatiger@gmail.com


Введение

Клиент-серверная архитектура лежит в основе всех сайтов и интернет-сервисов, десктоп-программ, которые передают данные по интернету. На сегодняшний день одним из наиболее популярных языков программирования, на которых пишется back-end, является Java.

В качестве альтернативы и замены модели Enterprise JavaBeans стал пользоваться популярностью Spring Framework, который предоставил Java-разработчикам бОльшую свободу в проектировании, а также легкие средства решения проблем, которые обычно возникают во время созданий приложений корпоративного масштаба.

Spring Framework является основой для Spring Boot, который упрощает использование первого с помощью автоконфигурации, удобной работы с зависимостями и компонентами приложения. Spring Boot – среда, которая позволяет ускорить создание приложения на основе Spring, требуя минимум усилий по настройке и написанию кода.

Для работы с базами данных на Java существует несколько подходов. Первый из них, классический, – обращение к базе с помощью JDBC, недостатки которого призвана устранить спецификация JPA, самым популярным инструментом реализации которой является Hibernate. А библиотека, которая позволяет еще более упростить взаимодействие с базой данных и добавляет дополнительный уровень абстракции, – Spring Data JPA. Она использует Hibernate в качестве ORM провайдера, и именно ее зачастую применяют при реализации клиент-серверных приложений.

Постановка задачи

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

JDBC (Java DataBase Connectivity) – это прикладной интерфейс, который позволяет взаимодействовать с любой базой данных при помощи одних и тех же методов. Достигается это за счет использования специального драйвера (JDBC драйвер).

Подход JDBC можно назвать основополагающим при работе с базами данных в Java. Такой подход не просто дает возможность, но и заставляет каждый раз прописывать практически все взаимодействие с базой данных вручную: создание подключения, запрос и его выполнение, получение результатов. Такое громоздкое взаимодействие очень неудобно в больших постоянно развивающихся проектах [2].

В связи с этим был придуман Hibernate, который уходит от «прямого» взаимодействия с базой данных в сторону объектов, ведь Hibernate – ORM библиотека, а ORM представляет собой отображение объектов в структуры реляционной базы данных.

Spring Data JPA — это библиотека, которая добавляет дополнительный уровень абстракции поверх ORM реализации JPA. По умолчанию Spring Data JPA использует Hibernate в качестве ORM провайдера (чтобы выполнять запросы) [3].

В данной статье проведен анализ вышеописанных инструментов взаимодействия с базами данных. Основная цель – выяснить насколько отличается производительность, и какие инструменты следует использовать в конкретных случаях.

Анализ существующих решений

Вероятно, единственным преимуществом JDBC можно назвать скорость. Это вполне естественно, ведь Hibernate и Spring Data JPA являются «надстройками» над JDBC.

Hibernate позволяет сильно уменьшить количество кода для взаимодействия с базой данных, при этом стандартизуется и читается намного легче. Однако для подключения Hibernate необходимо выполнить mapping классов, то есть указать с какими классами ему следует взаимодействовать. Обычно конфигурация описывается в файлах .cfg.xml.

Spring Data JPA можно назвать вершиной этой пирамиды, но не потому что он превосходит все предыдущие подходы, а по той причине, что по умолчанию он использует Hibernate, который в свою очередь использует JDBC. А это сильно снижает производительность.

С целью определения быстродействия подходов JDBC, Hibernate и JPA проведен небольшой тест по скорости записи в таблицу, в котором использовались стандартные методы. При этом оптимизация запросов к базе данных не выполнялась.

Запись происходила в базу данных PostgreSQL. С помощью JDBC, Hibernate, JPA было записано от 100 записей до 100 000. Результаты приведены на рисунке 1 и в таблице 1.

График скорости выполнения запросов
Рисунок 1 – График скорости выполнения запросов для некоторых значений
Таблица 1 – Результаты вставки записей
Технология 100 1000 5000 7500 10000 15000 25000 50000 75000 100000
JDBC 46 201 702 933 1257 1642 2575 5161 7372 9586
Hibernate 132 501 1350 1889 2121 2885 4098 6880 9741 11798
JPA 132 1156 13960 29907 50915 111693 315601 1320791 3114972 5504210

Выводы

В результате исследования можно сделать вывод, что JDBC стоит использовать в том случае, когда нужно простое «прямое» и очень требовательное по скорости приложение.

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

Hibernate является неким средним вариантом, который лучше выдержит нагрузку постоянного обращения, но при этом будет менее удобен чем Spring Data JPA.

Литература

  1. Разница между JDBC, JPA, Hibernate, Spring Data JPA [Электронный ресурс]. – Режим доступа: https://bit.ly/30rx25r. – Заглавие с экрана.
  2. Develop Java applications with Oracle Database [Электронный ресурс]. – Режим доступа: https://www.oracle.com/database/technologies/appdev/jdbc.html/. – Заглавие с экрана.
  3. Spring Data JPA - Reference Documentation [Электронный ресурс]. – Режим доступа: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference. – Заглавие с экрана.