Сравнение реализаций подходов по количеству обращений в базу данных

Еще одним показательным результатом в данном исследовании является сравнение количества последовательных обращений в базу данных при использовании той или иной технологии доступа. Подробнее о значимости такого сравнения будет сказано в разделе «заключение», здесь же приводятся непосредственно результаты.

Исследуются подходы с

1. Доступом к данным непосредственно через JDBC-драйвер

2. Доступом через EJB2.0 с полным кэшированием

3. Доступом через JPA с настройками кэширования по умолчанию

И непосредственно исследуемые случаи:

1. Открытие страницы с одним объектом (имеющим несколько десятков дочерних объектов и текстовые/ссылочные параметры

2. Среднее значение после открытия 50 страниц

3. Повторное открытие одной страницы (специально для исследования влияния настроек кэширования)

Результат

JDBC

EJB2.0

JPA

1 страница

3

117

230

50 страниц

3

65

84

1 страница повторно

3

44

27

Сравнение трудоемкости реализации подходов и моделей

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

Код на стороне сервера приложения в основном представляет собой реализацию той или иной технологии. В качестве исследуемых рассматриваются следующие варианты

НЕ нашли? Не то? Что вы ищете?

1. EJB2.0 без дополнительных настроек, без поддержки иерархии объектных типов и атрибутных схем в метамодели

2. EJB2.0 с полноценной поддержкой метамодели

3. EJB2.0 с кешированием

4. JPA без дополнительных настроек, без поддержки иерархии объектных типов и атрибутных схем в метамодели

5. JPA с поддержкой наследования объектных типов и атрибутных схем

Исследуемыми параметрами принимаются такие, как

1. Объем написанного кода

2. Количество классов в реализации

Результат

1.

2.

3.

4.

5.

1.

63 Kb

286 Kb

405 Kb

22 Kb

33 Kb

2.

19

34

45

14

20

Анализ результатов

Упомянутые в данной работе сценарии доступа к данным встречаются в бизнес-процессах, являющихся неотъемлемой частью современных информационных систем. Так как подобного рода системы могут иметь совершенно различные конфигурации (назначение с точки зрения пользовательских операций, размеров базы данных, требований на быстродействие, масштабируемость, количество одновременно работающих пользователей), то и сценарии для нагрузочных испытаний взяты из таких «разнородных» систем. Целью выбора именно такого набора сценариев было сравнительное исследование моделей хранения данных и технологий доступа к ним в применении к реальным потребностям рынка информационных технологий.

В данном разделе будет приведен анализ проведённых испытаний и выводы в виде рекомендаций по применению той или иной технологии в связке с конкретной моделью данных к целым классам информационных систем. На самом деле данные, полученных в результате исследования, представляют собой материал для многокритериального анализа в задаче принятия решения, и перечисление всех возможных вариантов вместе с решениями в виде текста и таблиц будет слишком громоздко и неструктурированно, поэтому сделано всё возможное, чтобы охватить только ключевые моменты, наиболее часто встречающиеся на практике разработки информационных систем. С учетом этого, рекомендации изложены последовательно, «от простого к сложному», следуя по масштабу информационной системы, сложности бизнес-процессов, доступных ресурсов на разработку и так далее, с учетом специфичных особенностей и сложностей того или иного решения. Приводится описание информационной системы вместе с присущими именно ей особенностями, и далее – предполагаемый набор технологий, который наилучшим образом подходит для реализации такой системы (иными словами, который показал наилучший результат в ходе нагрузочных испытаний среди подобных технологий применительно к сценариям, характерным для данной системы)

1. Система с фиксированной структурой данных, которая описывается сравнительно небольшим набором сущностей, связанных друг с другом согласно определенным правилам. Основная активность – навигация по объектам и параметрам.

Вне зависимости от объёмов обрабатываемых данных, предлагаемый набор – JPA + набор «плоских» таблиц в базе данных. Такой подход характеризуется

· дешевизной разработки, благодаря доступным средствам автоматического создания структуры классов в JPA по имеющимся в базе данных таблицам и наоборот

· достаточной производительностью, благодаря простоте запросов к данным, генерируемых механизмом JPA. Вообще говоря, такой подход даёт возможность использовать все доступные ресурсы базы данных по-максимуму, большей производительности достичь невозможно ни при каких условиях.

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

2. Система со структурой данных, которая может изменяться без необходимости перезагрузки сервера.

Возникает необходимость редактирования и чтения не только данных приложения, но и метаданных – непосредственно структуры. Модель с «плоскими» реляционными таблицами уже не лучшим образом подходит для такой цели, так как в процессе активной работы применение операторов DDL к базе данных может значительно снизить производительность или даже привести к ошибкам. Рекомендация для такой системы – использование адаптивной модели данных (или метамодели), которая позволяет интерпретировать метаданные как данные, а значит, позволяет работать с ними в режиме On-Line без необходимости остановки и перезагрузки сервера приложений.

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

· Дешевизной разработки

· Простотой конфигурации

· Поддержкой всех необходимых особенностей многопользовательского Enterprise-приложения (это конкурентный доступ к данным, транзакционность, обработка ошибок и т. д.)

Однако, как видно из раздела «Результаты», при использовании JPA происходит значительно больше обращений в базу данных (хотя и запросы по сложности оказываются «легче», чем в других технологиях). В случае, когда база данных удалена от сервера приложений, канал связи будет являться узким местом для производительности.

В противовес JPA предлагается использование технологии EJB2.0 со своими особенностями:

· Возможность управления доступом. Запросы к данным не генерируются автоматическим механизмом (это вызывает недостаток контроля, как в случае JPA), а прописываются программистом на этапе разработки

· Возможность управления дополнительными особенностями, такими как кэширование данных, метаданных. Это позволяет наиболее полно использовать возможности аппаратного обеспечения сервера приложений, и контролируемым образом распределять нагрузку на вычислительные ресурсы между различными модулями приложения. В JPA возможности такого тонкого управления нет, механизм равномерно распределяет ресурсы между модулями приложения.

3. Система со стихийно изменяющейся структурой данных.

Существуют системы, в которых «административная» составляющая сравнима по масштабу (объёму данных, числу пользователей) с «пользовательской». Такая ситуация приведет к тому, что сами метаданные будут меняться в равной степени часто с обычными данными системы, и это приведет к «сглаживанию» различий между этими составляющими. Этот факт обесценивает преимущества EJB2.0 перед JPA, описанные в предыдущем пункте, поэтому рекомендованный набор в данном случае – JPA + метамодель данных.

4. Система с достаточно небольшим объемом данных

В данном пункте «достаточно небольшой» объем означает, что аппаратные возможности сервера приложений позволяют большинство участвующих в процессах объектов постоянно держать в памяти быстрого доступа. Для такой системы в равной степени подходят возможности EJB2.0 с включенным механизмом кэширования и JPA со специальными настройками, рассчитанными на конкретную систему, но

· Разработка EJB2.0 реализации окажется значительно дороже своей JPA-альтернативы

· В случае, если реальный объем данных достаточно большой (намного больше возможностей оперативной памяти сервера приложений), но лишь малая часть («достаточно малая») используется гораздо чаще, чем остальные данные, реализация EJB2.0 с соответствующими улучшениями позволит контролируемо обрабатывать и держать в памяти быстрого доступа необходимые объекты, в то время как JPA этот контроль не предоставляет – и нужные данные будут вымещаться из кэша сервера непредсказуемо, что приведет к снижению производительности.

5. Система построения отчетов по большому объему данных

Несмотря на то, что переход от «плоских» реляционных таблиц к метамодели сопровождается снижением скорости доступа к данным, на «стандартные» сценарии навигации по объектам, выполнения бизнес-операций с отдельными объектами это ухудшение влияет не критически. Как видно из результатов нагрузочных испытаний, времена отклика системы на пользовательские действия по-прежнему остается в границах разумного допущения. Однако существуют операции, обрабатывающие большие количества объектов одновременно – такие, как построение отчетов, например. И в общем случае использование метамодели ухудшает производительность таких операций в несколько раз (засчет необходимости доступа в несколько разрозненных таблиц для того, чтобы достать параметры лишь одного объекта). Однако и для таких операций возможно разработать быстродействующее решение – об этом в данном исследовании написано в разделе «Некоторые усовершенствования», подразделе «Материализация представлений». Как видно из раздела «результаты», такое улучшение позволяет значительно ускорить операции построения отчетов.

«Нестандартная» однотабличная модель данных

Адаптивные модели данных позволяют интерпретировать структуру и метаданные (объектные типы, атрибуты, ограничения целостности) как данные, хранить их в соответствующих реляционных таблицах и обрабатывать наравне с другими данными приложения.

Если развивать такой подход далее, приходит мысль, что метаданные и этих таблиц можно представить в виде данных, а не структуры предопределенных таблиц в реляционной СУБД. Самой простой структурой для хранение абсолютно всех данных приложения (и метаданных, и непосредственно объектов с их параметрами) является одна таблица. Ниже будет показано, каким образом можно представить сложную структуру приложения с большим числом сущностей и большим объёмом данных в виде одной единственной реляционной таблицы.

Цели

Однотабличная модель данных позволяет инкапсулировать в себе практически любую структуру сущностей из предметной области. Например, набор «плоских» таблиц может быть разложен на набор объектных типов, атрибутов, объектов и их параметров соответственно, и каждый из экземпляров указанных сущностей может быть записан одной строкой такой таблицы. Связи между сущностями поддерживаются с помощью специальных полей: родительская сущность, атрибут, ссылка на сущность.

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

Ниже речь пойдет об исследованиях следующего характера:

· Исследование совместимости различных моделей данных, возможность их «вложения» друг в друга

· Увеличение уровня абстракции технологий доступа к данным над механизмом хранения, результаты исследования производительности и сложности таких преобразований

· Исследование влияния степени нормализации данных на быстродействие и сложность системы

Описание модели, реализации

Исследуемая модель представляет собой единственную таблицу со следующим набором полей:

· Id – уникальный идентификатор сущности. Применим в равной степени ко всем типам сущностей

· Parent_id – идентификатор родителя. Для параметра родителем может служить объект, для атрибута – объектный тип, к которому он привязан. Для объектного типа или объекта – указывается соответствующий родительский объектный тип или объект в иерархии

· Type_def_id – идентификатор типа. Для объекта это –соответствующий объектный тип, для параметра – атрибут, который его определяет, для объектного типа – атрибутная схема, к которой он принадлежит.

· Reference – ссылочное поле, имеет смысл для параметров, имеющих ссылочный тип. Фактически является значением параметра.

· Value – текстовое поле, имеет смысл для текстовых/числовых параметров. Представляет собой значение. Для объекта, атрибута, объектного типа имеет значение имени.

Также в качестве начального наполнения в данную таблицу вносятся несколько «основополагающих» строк. Например, строки, где в Value будет прописано «Объектный тип», «Атрибутная схема», «объект», на которые впоследствии будут ссылаться по Type_def_id «корневые» атрибутные схемы, типы и объекты. Затем таблица заполняется метаданными – объектными типами, атрибутами, схемами, и только после – объектами и параметрами.

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

Иерархии наследования объектных типов, объектов и атрибутных схем представлены подобно тому, как это сделано в «классической» метамодели, что позволяет с легкостью освоить такую структуру тем, кто уже имеет представление о метамоделях и их специфичных особенностях.

Доступ к такой модели осуществляется через обобщенный интерфейс. Каждая строка таблицы представляет собой объект. Назовем его GObject (Generalized Object). У объекта существуют методы для работы с полями, например:

GObject getParent();

GObject getTypeDef();

void setReference(GObject reference);

void setValue(String value);

void addChild(GObject child);

Collection<GObject> getChildren();

И им подобные, составляющие полный набор, необходимый для полноценной работы со строкой таблицы.

Результат

Вложенность моделей данных друг в друга

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

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

Результат исследования многократного «вложения» моделей данных в друг друга, полученная численная зависимость, интересна потому, что зачастую в условиях разнородных систем, при необходимости постоянной интеграции данных между различными приложениями, с различными структурами данных, в реальности возникает многократная вложенность моделей данных друг в друга. И зависимость эта позволит предсказать поведение системы (в частности, сложность её реализации и производительность) при подключении новой системы интеграции, надстройке нового уровня абстракции над данными и вообще при любом изменении подобного рода.

Зависимость быстродействия системы от степени нормализации данных

Набор метаданных для каждого объекта вычисляется иерархически, с учетом наследования объектов, объектных типов и атрибутных схем, как это делается в «классической» метамодели. Однако, для увеличения производительности, возможно сохранение результатов вычисления метаданных для конкретного объекта в виде дочерних к нему записей, или же записей, дочерних к его типу. Актуальность таких данных (по сути, представляющих себя административную составляющую информационной системы, так как рядовые пользователи не должны иметь возможности вносить изменения в метаданные) поддерживается на уровне механизма администрирования системы. Так как метаданные по объему в общем случае значительно меньше самих данных, избыток вычислений, требуемых на поддержание такой структуры, будет невелик. Такой подход к тому же вносит некоторую избыточность в сами данные, денормализуя структуру. Но преимущество данного подхода налицо: количество доступов в таблицу для получения метаданных снижается на порядок, а то и в несколько десятков раз (засчет того, что нет необходимости «поднимать» всю структуру с учетом наследования, достаточно лишь обойти текущий уровень иерархии и, возможно, предыдущий уровень). Исследование такого подхода и даёт ответ на вопрос о зависимости уровня нормализации на быстродействие системы, причем однотабличная модель данных – простейшая структура, на которой можно проводить такое исследование.

Заключение

В данной работе проведено сравнительное исследование различных технологий доступа к данным, таких как Enterprise Java Beans версии 2.0, Java Persistence API, Java Database Connectivity, и различных моделей хранения данных, как Representing Objects as Tables, с использованием таблиц реляционной СУБД, и Adaptive Object Model, метамодель на основании иерархических таблиц. В ходе исследования проведены нагрузочные испытания указанных технологий при использовании их в различных стандартных сценариях доступа к данным.

На основе результатов нагрузочных испытаний сделаны выводы о достоинствах и недостатках соответствующих технологий в различных условиях использования. К самым показательным выводам можно отнести следующее: при использовании метамодели подход с JPA предлагает значительно более простую реализацию и меньшие затраты на разработку решения, однако в среднем немного уступает подходу с EJB2.0 по производительности. Несмотря на последний недостаток, существуют обстоятельства, при которых производительность JPA выше, чем его конкурента, на идентичных сценариях и наборах данных, как, впрочем, существуют случаи, когда производительность этого подхода значительно уступает EJB2.0. Для обобщения полученных результатов приведен анализ в виде рекомендаций о применимости той или иной модели данных в комбинации с соответствующим подходом для некоторых распространенных классов информационных систем.

В разделе, посвященном однотабличной модели данных, приведено описание ещё одной нестандартной структуры хранения. Такая структура интересна прежде всего с методической точки зрения, так как позволяет формализовать некоторые критерии оценки модели данных и представить численно их параметры, давая таким образом возможность сравнивать построенные архитектурные решения математическими методами. Здесь же указано направление дальнейшего исследования нестандартных моделей данных.

Помимо основных технологий и моделей, исследуемых в данной работе, рассмотрены некоторые специфические решения, так или иначе применяемые в информационных системах, позволяющие значительно улучшить производительность единичных операций. К таким усовершенствованиям относится подход с материализованными представлениями для построения отчетов, доступ к данным напрямую через JDBC драйвер без использования каких-либо сторонних технологий, частичное или полное кэширование целых классов данных на стороне сервера. Численные результаты показывают эффективность такого рода усовершенствований.

Список использованных источников

1. Antonio Goncalves Beginning Java™ EE 6 Platform with GlassFish™ 3 From Novice to Professional – APRESS©, 2009

2. Ed Roman, Scott Ambler, Tyler Jewell Mastering Enterprise JavaBeans™, Second Edition – Wiley Computer Publishing, 2002

3. Floyd Marinescu EJB™ Design Patterns – Wiley Computer Publishing, 2002

4. John O'Donahue Java Database Programming Bible – John Wiley & Sons©, 2002

5. Joseph W. Yoder, Federico Balaguer, Ralph Johnson Architecture and Design of Adaptive Object-Model – , 2000 - http://www. /OOPSLA2001/AOMIntriguingTechPaper. pdf

6. Leon Welick, Joseph W. Yode, Rebecca Wirfs-Broc Adaptive Object-Model Builder – , 2009 – http:///PDFs/04welicki. pdf

7. Mike Keith and Merrick Schincariol Pro JPA 2: Mastering the Java™ Persistence API – APRESS©, 2009

8. Reza Rahman Keeping a Relational Perspective for Optimizing JPA – 2009

9. Rima Patel Sriganesh, Gerald Brose, Micah Silverman Mastering Enterprise JavaBeans™ 3.0, Wiley Computer Publishing, 2006

10. Rod Johnson Expert one-on-one J2EE Design and Development – Wrox Press Ltd. October 2002

11. Thomas Kyte Expert Oracle Database Architecture, Second Edition – APRESS©, 2010

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3