Система объектно-реляционного отображения

Введение

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

Задачей данной работы является реализация собственной системы объектно-реляционного отображения на языке программирования Java, предоставляющий следующий функционал для работы с БД:

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

Областью применения разработанной системы является разработка приложений, написанных на языке программирования Java, выполняю­щие работу с реляционными БД.

Описание разработанной системы

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

Разработанная система удовлетворяет базовым требованиям, предъ­являемым к системам объектно-реляционного отображения.

Для реализации системы использовался объектно-ориентированный язык высокого уровня Java. Она, как показано на рисунке, является про­межуточным слоем между уровнем приложения (Application layer) и уровнем реляционной БД (Database layer).

Объектно-ориентированный интерфейс для синхронизации объектов Java c базой данных предоставляют классы, реализующие шаблон про­ектирования Data Access Object (DAO). Если DAO-класс уже был сгенерирован в ходе работы программы, то вместо повторной генерации объект будет браться из кэша.

Класс QueryCreator непосредственно генерирует SQL-запросы к БД на основании вызываемых методов и передаваемых параметров. Сгене­рированные запросы передаются базе данных, используя классы под­ключенного JDBC-драйвера (PreparedStatement, CallableStatement). Для журналирования используется библиотека log4j. Пример.

По методу

public T queryForId(int id) throws SQLException формируется SQL-запрос:

SELECT * FROM tableName WHERE idColumn = id;

Сравнение разработанной системы с существующими аналогами

Сравним реализованную систему с такими системами объектно-реляционного отображения, как Hibernate, EclipseLink, OpenJPA по объ­ему потребляемой памяти. Тестовая программа содержит 10 потоков для вставки данных и 10 потоков для выборки данных. Анализируется объем потребляемой памяти за фиксированный промежуток времени (3 мину­ты). Результаты проведенных экспериментов представлены в таблице.

Результаты проведенных экспериментов

Среднее количество памяти, используе­мое JVM, Mb Максимальное количество памяти, используемое JVM, Мб Количество загруженных в память Java-классов
EclipseLink 43 68 3079
Hibernate 85 130 3863
OpenJPA 62 96 3177
Реализованная система 29 61 1725

Исходя из результатов эксперимента, можно сделать вывод о том, что реализованная система потребляет меньший объем памяти в сравнении с рассмотренными аналогами. Это обусловлено, прежде всего, меньшим количеством Java-классов, загружаемых JVM при работе системы.

Также выполнена оценка производительности системы в сравнении с использованием непосредственно JDBC для доступа к данным. Резуль­таты эксперимента представлены в таблице.

Результаты проведенных экспериментов

Общее количество запросов Количество запросов вставки Количество запросов выборки
JDBC 402547 195418 207129
Реализованная система 327952 158378 169574

Исходя из результатов эксперимента, можно сделать вывод о том, что при использовании непосредственно JDBC при работе с СУБД мы полу­чаем некоторый незначительный выигрыш в производительности в сравнении с использованием разработанной системой. Это обусловлено тем, что разработанная система является надстройкой над JDBC и ис­пользует JDBC API на более низком уровне для передачи сгенерирован­ных SQL-запросов в СУБД. В то же время разработанная система позво­ляет выполнять отображение объектов Java-классов на таблицы СУБД, а также обеспечивает механизм формирования запросов в СУБД при по­мощи объектно-ориентированного подхода, вызывая методы Java-классов. Это избавляет от необходимости написания запросов на языке SQL и вызова методов JDBC. Данные преимущества значительно со­кращают время разработки, объем кода и поддержку программного про­дукта, использующего СУБД в качестве хранилища данных.

Заключение

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

Актуальность данной работы обусловлена широким расспространением объектно-ориентированной методологии разработки при­кладных систем и одновременно доминирующим положением на рынке реляционных БД. Разработанная система является промежуточным сло­ем между объектно-ориентированным языком программирования Java и реляционными БД, предоставляя необходимые объектно-ориен­тированные интерфейсы к данным, хранимым под управлением реляци­онных систем управления БД (СУБД). В этом случае удачно сочетаются преимущества реляционных СУБД с преимуществами объектно-ориентированного подхода.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.