bartwell
@bartwell

Стоит ли использовать ORM при большой БД?

Пишу приложение, в приложении будет БД с большой таблицей (более 100'000 записей). Каждая запись в БД - по сути модель данных.
Изначально планировал использовать ORMlite, однако встречаются отзывы, что при больших объемах данных такой подход будет неэффективным. Так ли это? Если да, то что лучше использовать в этом случае?
  • Вопрос задан
  • 286 просмотров
Решения вопроса 1
@lazard105
Проблема с ORMlite именно в маппинге объектов. Из-за рефлекшна - работает он очень медленно, особенно если запрашивается большой объем данных.
Но эта проблема легко решается написанием своего маппера на конкретную таблицу/запрос.
Делается это примерно так :
// return the orders with the sum of their amounts per account
GenericRawResults<Foo> rawResults =
  orderDao.queryRaw(
    "select account_id,sum(amount) from orders group by account_id",
    new RawRowMapper<Foo>() {
            public Foo mapRow(String[] columnNames,
              String[] resultColumns) {
                return new Foo(Long.parseLong(resultColumns[0]),
                    Integer.parseInt(resultColumns[1]));
        }
    });


Однако большие запросы, частенько, сложно формировать и оптимизировать в объектном виде, поэтому такие запросы проще делать напрямую (sql запрос через SQLiteOpenHelper). При этом лучше работать с курсором, а не с объектами, чтобы избавится от задержки на маппинг и затрат память.
(Это касается только действительно тяжелых запросов)

P.S. Гигантские базы данных обычно в приложениях работающих в оффлайн режиме. Если же наличие интернета обязательно для работы приложения, то лучше выносить данные на сервер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
thelongrunsmoke
@thelongrunsmoke
Программист
Обычно, гигантская БД на устройстве - признак архитектурных проблем. Приберите часть данных на сервер, вряд ли они нужны в полном объеме в каждом сеансе работы с приложением.
ORM для того и служит, чтобы облегчить работу с большими базами. Мне нравится GreenORM, некоторая сложность её настройки окупается скоростью.
Ответ написан
TranE91
@TranE91
Senior Android Engineer
Выбор типа ORM для мобильной разработки, притока скорости даст только в маппинге объектов. Я долгое время использовал ORMLite, но решил отказаться из-за сложности развертывания больших моделей и дебильных DAO. Если стоит условие юзать SQLite, посмотрите в сторону DBFlow. А вообще, нынче популярен тренд Объектно-Ориентированной БД типа Realm.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы