Сравнение производительности ORM-библиотек как критерия выбора для работы с базой данных SQLite на устройствах с ОС Android | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 января, печатный экземпляр отправим 8 января.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №26 (130) декабрь 2016 г.

Дата публикации: 03.12.2016

Статья просмотрена: 365 раз

Библиографическое описание:

Марашан, М. В. Сравнение производительности ORM-библиотек как критерия выбора для работы с базой данных SQLite на устройствах с ОС Android / М. В. Марашан. — Текст : непосредственный // Молодой ученый. — 2016. — № 26 (130). — С. 146-149. — URL: https://moluch.ru/archive/130/36100/ (дата обращения: 22.12.2024).



Проведено сравнение трех наиболее популярных на текущий момент ORM-библиотек для мобильных приложений под управлением ОС Android с точки зрения производительности на примере вставки и извлечения простых POJO-объектов. Обоснован выбор определенной ORM для проектирования социального мобильного приложения.

На сегодняшний день для большинства выпускаемых программных продуктов для хранения данных используются реляционные системы управления базами данных. Использование реляционной базы данных для хранения объектно-ориентированных данных приводит к так называемому «семантическому разрыву» [1]. Это обозначает, что разработчик вынужден писатьПО, которое должно уметь одновременно обрабатывать данные в объектно-ориентированном виде (используя основной язык проектирования) и сохранять эти данные в реляционной форме (с применением SQL запросов).

Для преодоления данной проблемы применяются ORM (англ. Object-RelationalMapping) — технология программирования, которая связывает базы данных с объектами объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

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

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

В данной работе проведено исследование производительности ORM-библиотек, на основании которого выбрана библиотека для работы с базой данных SQLite на устройствах с ОС Android.

Стоит отметить, что Android SDK предоставляет нативные средства для хранения данных [2], среди которых:

  1. Shared Preferences. Хранилище типа ключ-значение для примитивных типов данных, которое представляет собой обертку над XML файлом, хранящимся на устройстве. Поэтому для хранения множества однотипных структурированных данных не подходит, так как в таком случае будет занимать неоправданно большой объем памяти.
  2. Стандартная база данных SQLite, предоставленная с классами-помощниками в комплекте: SQLiteOpenHelper, ContentValues и др. Однако, использование этих помощников подразумевает написание шаблонного кода, отслеживание за созданием и изменением таблиц, созданием методов для операций над данными. Это накладывает трудности при дальнейшей поддержке, при добавлении новых и редактировании старых сущностей.
  3. Класс Content Provider. Не избавляет от необходимости реализовать логику создания, обновления таблиц и базовых CRUD операций. Положительной стороной Content Provider является возможность использовать некоторые классы платформы для асинхронности доступа и безопасности работы с данными: AsyncQueryHandler, CursorLoader, SyncAdapter и др.

Многие разработчики Android приложений используют сторонние ORM-библиотеки, которые позволяют обеспечить работу с данными в терминах классов, а не таблиц данных и напротив, преобразовать термины и данные классов в данные, пригодные для хранения в СУБД [3]. Иными словами, это позволяет не писать SQL-код для взаимодействия с данными в базе.

В работе рассмотрены 3 наиболее популярные на настоящий момент библиотеки: ActiveAndroid, ORMLite, GreenDao.

Проводимый тест проверяет, за какое время каждая библиотека может сохранять сущности в ходе SQLite транзакции, и за какое время совершит операцию по извлечению записи и сериализации в сущность. В базу данных добавляются тысяча записей, которые после перезагрузки и очищения кэша считываются и записываются в объекты. Каждая ORM проверялась пять раз, за результат взято осредненное время выполнения.

Тестовая сущность состоит из пяти полей: одно целочисленное, четыре текстовых (рис. 1). Содержание данной тестовой сущности отражает упрощенные сущности, на которых будет построена рабочая база данных, поэтому результаты проводимого теста качественно покажут, какая ORM наиболее производительная для поставленной задачи.

C:\Users\Hello_world\Desktop\Безымянный.png

Рис. 1. Сущность для проведения испытаний ORM-библиотек

Результаты тестирования отражены на рис. 2 и рис. 3 в виде диаграмм.

Таким образом, наиболее производительной оказалась ORM GreenDAO.

Рис. 2. Результаты тестирования по вставке 1000 записей в таблицу

Рис. 3. Результаты тестирования по извлечению 1000 записей в таблицу

Рассмотрим создание базы данных с помощью GreenDAO в сравнении с ближайшим по скорости конкурентом ORMLite.

ORMLite использует аннотации при объявлении сущностей, что позволяет гибко вносить изменения в существующую базу данных при последующих сборках. Пример формирования рассмотренной сущности представлен в Листинге 1.

Листинг 1

Создание таблицы БД на основе сущности спомощью ORMLite

@DatabaseTable(tableName = "user")
public class AlarmEntity implements BenchmarkEntity {
@DatabaseField(columnName = "id", generatedId = true)
private long id;
@DatabaseField(columnName = "usermane")
private String usermane;
@DatabaseField(columnName = "firstname")
private String firstname;
@DatabaseField(columnName = "lastname")
private String lastname;
@DatabaseField(columnName = "vkid")
private String vkid;
}

Для формирования базы данных в GreenDAO сначала необходимо в отдельном проекте создать класс-генератор и запустить компиляцию. Пример класса-генератора приведен в Листинге 2.

Листинг 2

Класс-генератор для создания БД спомощью GreenDAO

public class DAOGenerator {
public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.joggle.greendao");
schema.enableKeepSectionsByDefault();
Entity entity = schema.addEntity("user");
entity.addIdProperty().autoincrement();
entity.addStringProperty("username");
entity.addStringProperty("firstname");
entity.addStringProperty("lastname");
entity.addStringProperty("vkid");
new DaoGenerator().generateAll(schema, "../src-gen/");
}
}

После этого GreenDAO сгенерирует классы, которые необходимо будет добавить в проект Android-приложения. Примерсгенерированногоклассапредставленв Листинге 3.

Листинг 3

// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit.
/**
* Entity mapped to table "USER".
*/
public class User {

private Long id;
private String username;
private String firstname;
private String lastname;
private String vkid;
}

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

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

Данное исследование проводилось при поддержке Фонда содействия инновациям по программе «УМНИК» по договору № 9462ГУ/2015 от 03.11.2015 по теме «Разработка социального будильника для удовлетворения психологических потребностей молодежи Joggle».

Литература:

1. Rick F. van der Lans. The SQL Guide to SQLite — Paperback, 2009. – 548 pages.

2. Харди Б., Филлипс Б., Стюарт К., Марсикано К. Android. Программирование для профессионалов. 2-еизд. – СПб.: Питер,2016. — 640 с.

3. Christian Bauer, Gavin King, Hibernate in Action (In Action series) — Manning Publications, 2004. — 408 pages.

Основные термины (генерируются автоматически): ORM, баз данных, данные, результат тестирования, CODE, CRUD, какое время, отдельный проект, реляционная база данных, реляционная форма.


Похожие статьи

Сравнение моделей качества программного обеспечения

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

Сравнение потоков Java и Kotlin Coroutines в контексте Android-разработки

В современной разработке мобильных приложений на Android, понимание и эффективное использование многозадачности является ключевым для создания высокопроизводительных и отзывчивых приложений. Многозадачность позволяет приложениям одновременно обрабаты...

Влияние выбора программной платформы на безопасность веб-приложений

В данной статье проведен анализ безопасности трех ведущих программных платформ для веб-разработки: Symfony, Laravel и Yii. Целью исследования было сравнение уровня безопасности этих платформ с учетом выбора наиболее подходящей для создания безопасных...

Методика исследования вредоносных программ с использованием инструмента ProcDOT

Статья посвящена методике исследования функциональности вредоносных программ с использованием инструмента ProcDOT. Даны конкретные шаги для подготовки к проведению анализа с обоснованием выбираемых программных систем и инструментов. Кратко охарактери...

Проектирование программного обеспечения сканера веб-уязвимостей TechnoScan c использованием нотаций диаграммы UML

В статье представлен анализ актуальности использования сканеров уязвимости для предотвращения возможных угроз и выявления уязвимостей веб-приложений на ранних этапах. Представлены результаты проектирования сканера веб-уязвимостей “TechnoScan” с испол...

Разработка и отладка программного обеспечения для подавления артефактов в электрокардиограмме

В данной статье описана спроектированная программа, представляющая виртуальную программу для подавления артефактов в электрокардиограмме, написанная в среде Mathcad. Так же был построен график спектральной области, по которому можно найти оптимальное...

Облик перспективной навигационной системы для подвижного наземного объекта

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

Сравнительный анализ программных продуктов для мониторинга и очистки жестких дисков ПК

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

Задача распознавания речи и выбор оптимального сервиса для использования в программно-аппаратном комплексе «Умное зеркало»

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

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

В статье описывается подход для реализации многомодульной, слабосвязанной архитектуры в Android приложении, с использование системы сборки Gradle. Рассматриваться проблемы, которые возникают в процессе разработки, и пути их решения.

Похожие статьи

Сравнение моделей качества программного обеспечения

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

Сравнение потоков Java и Kotlin Coroutines в контексте Android-разработки

В современной разработке мобильных приложений на Android, понимание и эффективное использование многозадачности является ключевым для создания высокопроизводительных и отзывчивых приложений. Многозадачность позволяет приложениям одновременно обрабаты...

Влияние выбора программной платформы на безопасность веб-приложений

В данной статье проведен анализ безопасности трех ведущих программных платформ для веб-разработки: Symfony, Laravel и Yii. Целью исследования было сравнение уровня безопасности этих платформ с учетом выбора наиболее подходящей для создания безопасных...

Методика исследования вредоносных программ с использованием инструмента ProcDOT

Статья посвящена методике исследования функциональности вредоносных программ с использованием инструмента ProcDOT. Даны конкретные шаги для подготовки к проведению анализа с обоснованием выбираемых программных систем и инструментов. Кратко охарактери...

Проектирование программного обеспечения сканера веб-уязвимостей TechnoScan c использованием нотаций диаграммы UML

В статье представлен анализ актуальности использования сканеров уязвимости для предотвращения возможных угроз и выявления уязвимостей веб-приложений на ранних этапах. Представлены результаты проектирования сканера веб-уязвимостей “TechnoScan” с испол...

Разработка и отладка программного обеспечения для подавления артефактов в электрокардиограмме

В данной статье описана спроектированная программа, представляющая виртуальную программу для подавления артефактов в электрокардиограмме, написанная в среде Mathcad. Так же был построен график спектральной области, по которому можно найти оптимальное...

Облик перспективной навигационной системы для подвижного наземного объекта

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

Сравнительный анализ программных продуктов для мониторинга и очистки жестких дисков ПК

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

Задача распознавания речи и выбор оптимального сервиса для использования в программно-аппаратном комплексе «Умное зеркало»

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

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

В статье описывается подход для реализации многомодульной, слабосвязанной архитектуры в Android приложении, с использование системы сборки Gradle. Рассматриваться проблемы, которые возникают в процессе разработки, и пути их решения.

Задать вопрос