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

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

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

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

  • ORMLite
  • GreenDAO ORM
  • db4o
  • ActiveAndroid

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

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

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

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

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


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


Поэтому мои вопросы:

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

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

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

Слой ORM привлекателен.

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

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

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

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

Мои 2 цента.

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

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

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

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

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

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

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

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