УДК 004.9
ТЕСТИРОВАНИЕ И АНАЛИЗ СРЕДСТВ ВЗАИМОДЕЙСТВИЯ С БАЗОЙ ДАННЫХ ПРИ ПРОЕКТИРОВАНИИ КЛИЕНТ-СЕРВЕРНОГО ПРИЛОЖЕНИЯ
Введение
Клиент-серверная архитектура лежит в основе всех сайтов и интернет-сервисов, десктоп-программ, которые передают данные по интернету. На сегодняшний день одним из наиболее популярных языков программирования, на которых пишется 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.
| Технология | 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.
Литература
- Разница между JDBC, JPA, Hibernate, Spring Data JPA [Электронный ресурс]. – Режим доступа: https://bit.ly/30rx25r. – Заглавие с экрана.
- Develop Java applications with Oracle Database [Электронный ресурс]. – Режим доступа: https://www.oracle.com/database/technologies/appdev/jdbc.html/. – Заглавие с экрана.
- Spring Data JPA - Reference Documentation [Электронный ресурс]. – Режим доступа: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference. – Заглавие с экрана.