Привет, Хабр! Хочу поделиться результатами сравнения популярных DB-библиотек, используемых на Android. Необходимость выбрать одну из таких библиотек есть у каждого Android-разработчика, так как писать на чистом Android API крайне неудобно, приходится каждый раз делать слишком много работы — необходимо в каждом новом проекте заново создавать наследников классов ContentProvider и SQLiteOpenHelper, писать SQLite-скрипт для создания базы данных, писать перевод объектов моделей на язык запросов и обратно и много другое. На основе этого появилось несколько библиотек, они имеют разные подходы и особенности, но явного лидера среди них нет. Поэтому я и решил сделать сравнительный анализ данных библиотек.
Результаты сравнения приведены в документе на Google Drive. В сравнении участвовали следующие библиотеки:
- OrmLite
- RushOrm
- GreenDao
- Realm
- Firebase
- DBFlow
- Requery
- SqlDelight + SQLBrite
Для сравнения я использовал следующие критерии:
- Наличие каскадного удаления/добавления/обновления
- Возможность вручную специфицировать миграцию
- Возможность объявления объектов для сохранения
- Усилия на первую настройку и поддержку
- Есть ли высокоуровневая надстройка над языком запросов
- Возможность оптимизировать на SQLite
- Популярность
- Поддерживаемость
- Стабильность работы
- Производительность
Для себя я выделил следующих лидеров: GreenDao, Realm и DBFlow. Такой выбор был осуществлен из-за хорошей поддержки библиотек со стороны авторов, далее идет критерий "Усилия на первую настройку и поддержку" (после чего отметается Firebase) и далее "Производительность" (после чего отметается Requery). На основе этих же критериев (а может быть и ещё каких-то), вы можете выбрать совсем других лидеров списка, хотелось бы услышать ваше мнение, почему именно.
В данном сравнении мне бы очень хотелось также ориентироваться на критерий "Стабильность работы", но, к сожалению, у меня нет необходимой информации, чтобы сказать о наличии в библиотеках критичных или не критичных багов, а также о подводных камнях, не позволяющих использовать данные библиотеки в серьезных production-проектах. Прошу в комментариях поделиться своим опытом для заполнения пробелов.
Хочу сразу указать, что данное сравнение основывается целиком на моём мнении, которое со временем может быть изменено, в том числе и на основе ваших комментариев к данному посту. В данной публикации я хотел поделиться своими наработками с сообществом, услышать ваше мнение, а также дополнить пустые пункты сравнения для упрощения процесса выбора DB-библиотеки для следующего pet-project.
Комментарии (3)
TheDeadOne
15.01.2017 07:53+1А где примеры кода для каждой из библиотек? Где описание функционала и особенностей? Где результаты бенчмарков?
terrakok
15.01.2017 10:52а где взгляд внутрь? где сравнение областей применения?
из сложной и интересной темы сделали два параграфа ни о чем
LexS007
Странное сравнение. В перемешку собраны ORM библиотеки для SQLite и отдельные NoSQL базы данных, по типу Realm, да еще в одном списке с ними Cloud DB — Firebase.
Решения должны выбираться под требования задачи:
— Реляционная/не реляционная DB.
— Локальная/не локальная.
и тд.
Firebase, например, автоматом отпадает, если требуется только локальная база, у вас же такого критерия нет.