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


  1. LexS007
    15.01.2017 05:24
    +1

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

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

    Firebase, например, автоматом отпадает, если требуется только локальная база, у вас же такого критерия нет.


  1. TheDeadOne
    15.01.2017 07:53
    +1

    А где примеры кода для каждой из библиотек? Где описание функционала и особенностей? Где результаты бенчмарков?


  1. terrakok
    15.01.2017 10:52

    а где взгляд внутрь? где сравнение областей применения?
    из сложной и интересной темы сделали два параграфа ни о чем