Создание веб-приложений с использованием современных ORM-фреймворков

Объектно-реляционное отображение. ORM-фреймворки. Загрузка по требованию как шаблон проектирования. Способы расширения классов-сущностей. Внедрение в байт-код. Загрузка полей и свойств сущностей в detached состоянии. Механизм пакетной выборки.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.07.2012
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

List<Test> tests = entityManager

.createQuery(“SELECT DISTINCT t FROM Test t LEFT JOIN FETCH t.categories WHERE t.addedBy.id = :uid”)

.setParemeter(“uid”, uid)

.getResultList();

Благодаря чему и тесты и соответствующие им категории получаются из базы данных за один SQL запрос.

5.3 Оцениваемые параметры

При оценке каждого из описанных подходов учитывались 2 количественные характеристики:

1) общее количество SQL запросов, которое генерирует конкретный JPA провайдер

2) общее время, затрачиваемое обработку этих запросов

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

5.4 Условия сравнения

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

От имени преподавателя было создано 10 категорий и 200 тестов. Каждый из 200 тестов принадлежал в свою очередь, к 10 категориям. Таким образом, суммарное число сущностей, которое необходимо было извлечь из базы данных: 1 + 10 + 200 + 200 * 10 = 2211.

Тестирование проводилось с использованием СУБД PostgreSQL 9.1.3 и сервера приложений Glassfish 3.1.2 на машине с процессором AMD A6 и 4гб памяти DDR3.

5.5 Результаты сравнения

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

Таблица 2.

Сравнительная характеристика.

Hibernate

EclipseLink

OpenJPA

шт. / мс.

шт. / мс.

шт. / мс.

FetchType.LAZY

203 / 760

203 / 640

203 / 890

FetchType.EAGER

203 / 750

203 / 650

4 / 224

FetchType.LAZY

+ пакетная выборка

@BatchSize

(size =128)

@BatcFetch(BatchFetchType.*)

-

JOIN

IN

EXISTS

6 / 250

4 / 130

4 / 100

4 / 140

JOIN FETCH

3 / 187

3 / 305

3 / 237

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

Сразу можно отметить несоизмеримое количество запросов 203 и 3-6, это сказывается эффект проблемы N+1 запросов, из-за которой в случае обычной загрузки, по требованию, то есть в первой строке, получаем наихудший результат и соответственно наибольшее время.

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

Однако при этом только в OpenJPA отсутствует механизм пакетной выборки.

При использовании Hibernate ограничение на размер пакетной выборки дало о себе знать, поэтому EclipseLink немного обошел его по производительности и количеству запросов.

Однако, не смотря ни на что ни один из подходов кроме использования JOIN FETCH не смог добиться минимального результата, ограничившись всего тремя запросами к БД.

ЗАКЛЮЧЕНИЕ

Просуммировав все вышесказанное, хотелось бы отметить, что

1) В противовес распространенному заблуждению, загрузка по требованию не всегда является самой эффективная стратегией.

2) Как показали результаты сравнения, предварительная загрузка в рамках JPA не всегда решает проблему N+1 выборок, JPA провайдеры иногда не могут эффективно сформировать запросы к базе данных.

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

4) Загрузка по требованию - это ни в коем случае не фича, ее нельзя использовать бездумно или просто игнорировать, конфигурация ленивой загрузки является важным аспектом при разработке системы с использованием ORM и должна приниматься в расчет еще на этапе проектирования приложения.

СПИСОК ЛИТЕРАТУРЫ

1. Мартин Фаулер, Архитектура корпоративных программных приложений, -- М.: Вильямс, 2008 . -- 544 с.: ил. ISBN 5-8459-0579-6

2. Java Platform, Enterprise Edition (Java EE) Technical Documentation. [Электронный ресурс]. URL: http://docs.oracle.com/javaee/ (дата обращения 15.12.2011);

3. Hibernate Reference Documentation. [Электронный ресурс]. URL: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/ (дата обращения 15.12.2011);

4. The EclipseLink JPA User's Guide. [Электронный ресурс]. URL: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA (дата обращения 15.12.2011);

5. Apache OpenJPA 2.2 User's Guide. [Электронный ресурс]. URL: http://openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/manual.html (дата обращения 15.12.2011);

6. Spring Framework Reference Documentation [Электронный ресурс]. URL: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/ (дата обращения 15.12.2011);

7. Spring Persistence with Hibernate / Paul Tepper Fisher, Brian D. Murphy -- Appres, 2010 . -- 264 с.: ил. ISBN 978-1-4302-2632-1;

8. Maarten Winkels, Advanced Hibernate: Proxy Pitfalls. [Электронный ресурс]. URL: http://blog.xebia.com/2008/03/08/advanced-hibernate-proxy-pitfalls/ (дата обращения 13.06.2012);

Размещено на Allbest.ru


Подобные документы

  • Архитектура и технология функционирования системы. Извлечение, преобразование и загрузка данных. Oracle Database для реализации хранилища данных. Создание структуры хранилища. Механизм работы системы с точки зрения пользователя и с точки зрения платформы.

    курсовая работа [2,2 M], добавлен 22.02.2013

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

    курсовая работа [152,2 K], добавлен 11.05.2014

  • Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.

    контрольная работа [51,7 K], добавлен 22.01.2013

  • Средства программирования, описание языка С++. Назначение программы, требования к документации. Стадии разработки, виды испытаний. Используемые технические, программные средства. Вызов и загрузка, входные и выходные данные. Программа и методика испытаний.

    контрольная работа [205,3 K], добавлен 23.07.2013

  • Проверка существования и статуса файла. Определение его размера. Открытие файла для чтения, записи, добавления. Закрытие файловых дескрипторов. Запись из переменной в файл. Загрузка файла из сети. Создание и удаление каталога. Функции работы с каталогами.

    презентация [133,9 K], добавлен 21.06.2014

  • Требования, предъявляемые к инфологической модели, ее компоненты. Построение модели и диаграммы "объект — свойство — отношение". Три типа бинарных связей. Подтипы и супертипы сущностей в языках программирования. Каскадные удаления экземпляров сущностей.

    лекция [404,3 K], добавлен 17.04.2013

  • Информационный анализ и выявление основных сущностей предметной области. Определение взаимосвязей сущностей. Построение концептуальной модели. Логическое моделирование базы данных "Компьютерный мир". Технология сбора, передачи и обработки информации.

    курсовая работа [1,9 M], добавлен 13.02.2014

  • Общее определение и история создания JavaScript библиотек, их назначение и использование. Виды и особенности JS фреймворков. Создание клиентского приложения (каталога комплектующих компьютера), написание кода страницы с использованием фреймворка Jquery.

    курсовая работа [544,5 K], добавлен 17.12.2013

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

    презентация [86,1 K], добавлен 20.12.2013

  • Обследование предметной области. Проектирование реляционной базы данных: описание входной и выходной информации, перечень сущностей и атрибутов, создание модели, выбор ключей. Разработка и обоснование представлений для отображения результатов выборки.

    курсовая работа [539,0 K], добавлен 12.12.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.