СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

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

Привет, Хабр! Хочу поделиться результатами сравнения популярных 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.

комментарии (4)

+1
LexS007 ,  
Странное сравнение. В перемешку собраны ORM библиотеки для SQLite и отдельные NoSQL базы данных, по типу Realm, да еще в одном списке с ними Cloud DB — Firebase.

Решения должны выбираться под требования задачи:
— Реляционная/не реляционная DB.
— Локальная/не локальная.
и тд.

Firebase, например, автоматом отпадает, если требуется только локальная база, у вас же такого критерия нет.
0
skatset ,  
По поводу того, что все указано в вперемешку — я намеренно не вводил ограничения на внутреннее представление хранимых данных, а рассматривал эти библиотеки с точки зрения инструментов для сохранения данных, насколько их удобно настроить и в дальнейшем пользоваться. Дело в том, что я в проектах стараюсь использовать Clean Architecture и весь код, который зависит от конкретной DB-библиотеки находится в отдельной сущности и с точки зрения остального приложения всё-равно как хранятся данные, поэтому и сравнение получилось довольно широкое.

Заметьте, что я намеренно не стал писать в названии статьи ни про ORM, ни про NoSql, так как для анализа больше значения имеет интерфейс, предоставляемый библиотекой, поэтому и подходят для сравнения абсолютно разнородные библиотеки.
+1
TheDeadOne ,  
А где примеры кода для каждой из библиотек? Где описание функционала и особенностей? Где результаты бенчмарков?
0
terrakok ,  
а где взгляд внутрь? где сравнение областей применения?
из сложной и интересной темы сделали два параграфа ни о чем