Выбор проекта ORM для Android (минимальный уровень API 7)

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

Я хотел бы переписать свое приложение для использования функции базы данных SQLite.
Поскольку я ленив, я хотел бы использовать какой-то ORM.

До сих пор я нашел только две большие библиотеки ORM:

Моя основная цель - повысить производительность при работе с данными как можно больше

Но я обнаружил две возможные проблемы с этими библиотеками.

  • ORMLite использует аннотации, что является большой проблемой производительности в pre-honeycomb из-за эта ошибка

  • GreenDAO использует какой-то генератор кода, и это замедлит процесс разработки, поскольку мне придется писать генератор, а затем использовать сгенерированный код. И мне не очень нравится эта идея.

  • DB4O - это JPA, который я всегда считал медленным и тяжелым для использования в памяти, поэтому не подходит для младших устройств (помните Android API v7)


объявление @ChenKinnrot:
Оценочной нагрузки должно быть достаточно, чтобы думать об использовании ORM.
В моем случае это около 25-30 уникальных таблиц и не менее 10 табличных объединений (по 2 - 4 таблицы за раз). Около 300-500 уникальных полей (столбцов)


Итак, мои вопросы:

  • Должен ли я использовать слой ORM/JPA в приложении Android?
  • Если да, то какую библиотеку вы бы мне рекомендовали? (и, пожалуйста, добавьте некоторые аргументы)

Ответ 1

Я использовал ORMLite и нашел это просто, как только вы получили его (несколько часов), достаточно мощный и не вызывал проблем с производительностью (приложение тестировалось в Gingerbread по желанию HTC и HTC Hero).

Я буду использовать его снова в любых проектах, которые мне нужны для использования DB.

Ответ 2

Уровень ORM является привлекательным.

Однако на практике я либо пишу простой ORM сам, либо используя Content Provider, которая не сотрудничает хорошо с ORM.

Я просмотрел некоторые существующие библиотеки ORM (в основном ORMLite, activeAnroid), но все они меня пугали поскольку они кажутся не такими легкими для начала.

"Мы говорим о 25-30 уникальных таблицах и не менее 10 табличных объединений. Около 300-500 уникальных полей (столбцов)"

Если у вас есть фиксированные и ограниченные шаблоны того, как будут запрашиваться данные, я бы рекомендовал написать ORM/sql самостоятельно.

Мои 2 цента.

Ответ 3

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

Ответ 4

Я получил некоторые знания, чтобы поделиться так: ORM по определению медленнее, чем писать собственный sql, предполагается упростить кодирование доступа к данным и предоставить общее решение, generic = работает медленнее, чем вы пишете свои запросы, если вы хорошо знаете SQL.

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

Если вы не хотите получать максимальную отдачу от sql db, используйте orm, у меня нет опыта работы с этим ормом, о котором вы упомянули, поэтому я не могу сказать, что выбрать.

И ваша БД не такая большая и сложная, поэтому время, которое вы сохраните с помощью orm, не является проблемой.

Ответ 5

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

Мне пришлось загрузить около 10 000 строк из базы данных, а стандартная реализация (я использовал ORMLite), потребовалось около 1 минуты (в зависимости от процессора устройства).

Когда вам нужно прочитать много данных из базы данных, вы можете выполнить простой SQL и самостоятельно проанализировать результаты (в моем случае мне нужно было запросить только 3 столбца из таблицы). ORMLite также позволяет извлекать исходные результаты. Таким образом, производительность увеличилась в 10 раз. Все 10 000 строк были загружены за 5 секунд или менее!